ES6-Promise的方法比较

1.Promise.all()
Promise.all()
方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
1 | const p = Promise.all([p1, p2, p3]); |
- 只有
p1
、p2
、p3
的状态都变成fulfilled
,p
的状态才会变成fulfilled
。此时p1
、p2
、p3
的返回值组成一个数组,传递给p
的回调函数。 - 只要
p1
、p2
、p3
之中有一个被rejected
,p
的状态就变成rejected
,此时第一个被reject
的实例的返回值,会传递给p
的回调函数。
总结:**==必须全部fulfilled
才返回fulfilled
的数组,否则返回第一个rejected
==**。
2.Promise.race()
Promise.race()
方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
1 | const p = Promise.race([p1, p2, p3]); |
上面代码中,只要p1
、p2
、p3
之中有一个实例率先改变状态,p
的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p
的回调函数。
总结:**==只返回第一个改变的状态,无乱成功或是失败。==**
3.Promise.allSettled()
Promise.allSettled()
方法接受一个数组作为参数,数组的每个成员都是一个 Promise 对象,并返回一个新的 Promise 对象。
==只有等到参数数组的所有 Promise 对象都发生状态变更(不管是fulfilled
还是rejected
)==,返回的 Promise 对象才会发生状态变更。
1 | const promises = [ |
上面示例中,数组promises
包含了三个请求,只有等到这三个请求都结束了(不管请求成功还是失败),removeLoadingIndicator()
才会执行。
4.Promise.any()
- 只要参数实例有一个变成
fulfilled
状态,包装实例就会变成fulfilled
状态; - 如果所有参数实例都变成
rejected
状态,包装实例就会变成rejected
状态。
==跟 Promise.all()
是完全相反的。==
Promise的实现原理
1 | function MyPromise(constructor) { |
上述就是一个初始版本的myPromise,在myPromise里发生状态改变,然后在相应的then方法里面根据不同的状态可以执行不同的操作。
1 | var p=new myPromise(function(resolve,reject){resolve(1)}); |
- Post title: ES6-Promise的方法比较
- Create time: 2020-09-27 13:15:00
- Post link: 2020/09/27/Promise/
- Copyright notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments