Promise.allSettled和Promise.all

1. Promise.allSettled

接受一个Promise数组,返回结果也是一个promise对象。
allSettled()方法接受的参数是一个数组,数组里每个元素都是一个promise对象。它返回的结果状态永远是成功,结果值是每一个promise对象返回的状态和值。

代码:

function promiseClick1(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num = 2; //生成1-10的随机数
                        console.log('2s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('2s数字太于10了即将执行失败回调');
                        }
                }, 2000);
           })
           return p
   }
   function promiseClick2(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num =3; //生成1-10的随机数
                        console.log('3s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('3s数字太于10了即将执行失败回调');
                        }
                }, 3000);
           })
           return p
   }
   function promiseClick3(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num = 4; //生成1-10的随机数
                        console.log('4s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('4s数字太于10了即将执行失败回调');
                        }
                }, 4000);
           })
           return p
   }

   Promise.allSettled([promiseClick3(), promiseClick2(), promiseClick1()])
        .then(function(results){
                console.log('成功',results);
        });

执行结果:
Promise.allSettled和Promise.all
注:在index.js文件中使用然后执行该文件,node的版本需在12.x.x以上
若node的版本在12.xx.xx以下会遇到这种错误
Promise.allSettled和Promise.all

2. Promise.all

如果所有promise对象返回的结果都是成功,all()方法返回的状态才是成功,返回的值是每个promise对象返回的值。如果有一个失败,all()返回的结果就是失败,返回的值是失败的promise对象返回的值。

成功:

function promiseClick1(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num = 2; //生成1-10的随机数
                        console.log('2s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('2s数字太于10了即将执行失败回调');
                        }
                }, 2000);
           })
           return p
   }
   function promiseClick2(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num =3; //生成1-10的随机数
                        console.log('3s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('3s数字太于10了即将执行失败回调');
                        }
                }, 3000);
           })
           return p
   }
   function promiseClick3(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num = 4; //生成1-10的随机数
                        console.log('4s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('4s数字太于10了即将执行失败回调');
                        }
                }, 4000);
           })
           return p
   }

   Promise.all([promiseClick3(), promiseClick2(), promiseClick1()])
        .then(function(results){
                console.log('成功',results);
        })
        .catch((erro) => {
                console.log(erro);
        });

Promise.allSettled和Promise.all

失败案例:

 
function promiseClick1(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num = 20; //生成1-10的随机数
                        console.log('2s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('2s数字太于10了即将执行失败回调');
                        }
                }, 2000);
           })
           return p
   }
   function promiseClick2(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num =3; //生成1-10的随机数
                        console.log('3s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('3s数字太于10了即将执行失败回调');
                        }
                }, 3000);
           })
           return p
   }
   function promiseClick3(){
        let p = new Promise(function(resolve, reject){
                setTimeout(function(){
                        var num = 4; //生成1-10的随机数
                        console.log('4s随机数生成的值:',num)
                        if(num<=10){
                                resolve(num);
                        }
                        else{
                                reject('4s数字太于10了即将执行失败回调');
                        }
                }, 4000);
           })
           return p
   }

   Promise.all([promiseClick3(), promiseClick2(), promiseClick1()])
        .then(function(results){
                console.log('成功',results);
        })
        .catch((erro) => {
                console.log(erro);
        });



Promise.allSettled和Promise.all
总结:
Promise.allSettled()和Promise.all()用来做批量异步处理。如果说每一个异步都需要得到结果,就用allSettled()。如果说每一个异步都需要成功,才能往下进行,就用all ()。
Promise.allSettled和Promise.all是ES11新特性。

上一篇:JavaScript探索


下一篇:Promise