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