微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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新特性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐