其他分享
首页 > 其他分享> > Promise.allSettled和Promise.all

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);
        });

执行结果:
在这里插入图片描述
注:在index.js文件中使用然后执行该文件,node的版本需在12.x.x以上
若node的版本在12.xx.xx以下会遇到这种错误
在这里插入图片描述

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);
        });

在这里插入图片描述

失败案例:

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

标签:function,10,resolve,num,Promise,reject,allSettled
来源: https://blog.csdn.net/qq_39341415/article/details/121719133