Promise知识点总结

promise 是 es6 的特性,现代主流浏览器基本上都已经支持,可以放心使用了。

promise 对象代表一个异步操作,具有3中状态:
1、pending :初始状态。
2、resolve:操作成功的状态。
3、reject:操作失败的状态。

创建 promise 对象后,会立即执行,其状态为 pending ;执行之后只有2中结果:执行成功会变成 resolve 状态,执行失败会执行 reject 状态。
promise 的状态是无法获取的,它是内部变量。但可以在控制台的输出可以看见:


promise 对象在控制台的输出

而且该状态也不需要获取,因为promise一旦建立,就会执行,而且该执行过程是不可以取消的,所以执行结果始终都会在promise.then()或者promise.catch()方法中出现。

promise 的优缺点:
优点:
1、将异步操作以同步操作的方式表达出来,避免层层嵌套回调函数
2、提供统一的操作接口,方便对异步操作的控制
缺点:
1、promise一旦建立,则不可取消
2、如果不设置回调函数,则会在promise内部抛出错误,不会反应到外部
3、当状态是pending是,无法判断当前状态(是异步刚刚开始执行还是即将完成了异步操作)

promise 的用法:
创建一个 promise 对象

var myPromise = new Promise(function(resolve, reject){
    // 执行异步操作逻辑
    // 异步操作成功了,则调用 resolve() 方法
    // 异步操作失败了,则调用 reject() 方法
})

例子:

var myFirstPromise = new Promise(function(resolve, reject){
    //当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
    //在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.
    setTimeout(function(){
        resolve("成功!"); //代码正常执行!
    }, 250);
});
 
myFirstPromise.then(function(successMessage){
    //successMessage的值是上面调用resolve(...)方法传入的值.
    //successMessage参数不一定非要是字符串类型,这里只是举个例子
    document.write("Yay! " + successMessage);
});

promise 相关API:
1、promise.then(onFulfilled, onRejected) 或者 promise.then(onFulfilled).catch(onRejected) 这两个写法是等价的,都是执行promise执行成功和失败的处理
2、promise.then、promise.catch、promise.finally 的链式操作
promise.prototype.then 方法返回的是一个新的 Promise 对象,因此可以采用链式写法。
例子:

const myPromise =
  (new Promise(myExecutorFunc))
  .then(handleFulfilledA,handleRejectedA)
  .then(handleFulfilledB,handleRejectedB)
  .then(handleFulfilledC,handleRejectedC)
  .finally(finallyHandleFunc);

// 或者,这样可能会更好...

const myPromise =
  (new Promise(myExecutorFunc))
  .then(handleFulfilledA)
  .then(handleFulfilledB)
  .then(handleFulfilledC)
  .catch(handleRejectedAny)
  .finally(finallyHandleFunc);

3、promise.all(iterable)
这个方法返回一个新的promise对象,该promise对象在iterable参数对象里所有的promise对象都成功的时候才会触发成功,一旦有任何一个iterable里面的promise对象失败则立即触发该promise对象的失败。
4、promise.allSettled(iterable)
等到所有promises都已敲定(settled)(每个promise都已兑现(fulfilled)或已拒绝(rejected))。
返回一个promise,该promise在所有promise完成后完成。并带有一个对象数组,每个对象对应每个promise的结果。
5、promise.any(iterable)
接收一个Promise对象的集合,当其中的一个 promise 成功,就返回那个成功的promise的值。
6、promise.race(iterable)
当iterable参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。
7、promise.resolve(value)
返回一个状态由给定value决定的Promise对象。
例如:

var p = Promise.resolve('Hello');
 
p.then(function (s){
  console.log(s)
});
// Hello

8、promise.reject(reason)
返回一个状态为失败的Promise对象,并将给定的失败信息传递给对应的处理方法
例子:

var p = Promise.reject('出错了');
 
p.then(null, function (s){
  console.log(s)
});
// 出错了

你可能感兴趣的:(Promise知识点总结)