ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Promise.allSettled和Promise.all

2021-12-04 18:01:58  阅读:166  来源: 互联网

标签:function 10 resolve num Promise reject allSettled


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有