有关promise的一些见解

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。


1.promise语法与then用法
var promise = new Promise(function(resolve,reject){
if(异步操作成功){
resolve(value);
}else{
reject(error);
}
})
resolve(value)是在Promise在已经异步完成成功(Resolved)之后执行的
reject(value)是在Promise在异步失败之后(Rejected)执行。
当然,也可以用then来指定:then(resolve,reject)
或者:then(resolve),catch(reject)


promise.then(function(value){
//sucess
},function(error){
//failure
});
promise.then(function(){
//success
}),catch(function(){
//failure
})
总结:


可以采用连续的then链式操作来写回调(这是因为返回值一直是新的Promise实例)。
以上例子可以看出来只要在第一个promise回调中添加resolve,之后的连续then就会默认执行。
可以在then中return出数据,并且这个数据会以参数的形式传入下一个then。


var promise = new Promise(function(resolve,reject){
var a=1;
resolve(a);
}).then(function(data){
console.log(data);
return ++data;
}).then(function(data){
console.log(data);
})
//打印结果依次为1  2;


catch()
var p = new Promise((resolve,reject)=> {
    n
 } ).then(()=>console.log('运行成功'))
 .catch( ()=>{a;console.log('报错');} )//这里我们没有定义a的值会报错
 .catch( ()=> console.log('报错2') )
 .then( ()=>console.log('报错后的回调') )
//运行结果是:'报错2'  '报错后的回调'


这里要注意,不管是then或者catch返回的都是一个新的Promise实例!而每个Primise实例都有最原始的Pending(进行中)到Resolve(已完成),或者Pending(进行中)到Reject(已失败)的过程。




Promise.all()
Promise.all方法用于将多个Promise实例,包装成一个新的 Promise实例.
var p = Promise.all([p1, p2, p3]);
all()接受数组作为参数。p1,p2,p3都是Promise的实例对象,p要变成Resolved状态需要p1,p2,p3状态都是Resolved,如果p1,p2,p3至少有一个状态是Rejected,p的状态就变成Rejected(个人感觉很像&&符号链接)




Promise.race()
var p = Promise.race([p1, p2, p3]);
上面代码中,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。(感觉就是||符号操作)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Promise 是 JavaScript 中一种处理异步操作的机制,它帮助开发者更好地组织和管理异步代码,使得代码更易于理解和维护。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。Promise 有以下几个主要的方法: 1. **`new Promise()`**:创建一个新的 Promise 对象,接受一个函数作为参数,这个函数有两个参数:resolve(成功回调)和 reject(失败回调)。 ```javascript const myPromise = new Promise((resolve, reject) => { // 异步操作 if (/* 成功 */) { resolve(value); } else { reject(error); } }); ``` 2. **`.then(onFulfilled, onRejected)`**:当 Promise 转变为 fulfilled 时,执行 onFulfilled 函数;如果变为 rejected,则执行 onRejected 函数。返回一个新的 Promise。 ```javascript myPromise.then(result => { // 处理成功结果 }, error => { // 处理错误 }); ``` 3. **`.catch(onRejected)`**:这是一个简写版的 `.then(null, onRejected)`,用于处理 Promise 的拒绝情况。 ```javascript myPromise.catch(error => { // 错误处理 }); ``` 4. **`.finally(onFinally)`**:无论 Promise 是否完成,都会执行 onFinally 函数,主要用于清理资源或做其他最终操作。 ```javascript myPromise.finally(() => { // 执行无论成功失败都会进行的操作 }); ``` 5. **`.all(arrayOfPromises)`** 和 **`.race(arrayOfPromises)`**:前者等待所有 Promise 全部成功后返回结果数组,后者则返回第一个完成的 Promise 结果。 6. **`Promise.resolve(value)`** 和 **`Promise.reject(error)`**:静态方法,用于直接创建已成功或已失败的 Promise。 7. **`.chain()` 或 `.then().then()`**:链式调用,用于在一系列的异步操作之间建立依赖关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值