ES6之Promise.all()函数

参考文章ECMAScript 6 入门 #Promise.all()

概述

Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例,一次性处理n个Promise对象。

基础用法
//声明Promise对象
const p1 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve('p1 done');
    },1500)
})

const p2 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve('p2 done');
    },1500)
})

const p3 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
        resolve('p3 done');
    },1500)
})

//调用all函数
Promise.all([p1,p2,p3]).then((res)=>{
    //process
    //console.log('p1 done,p2 done,p3 done') after 4.5s
}).catch((err)=>{
    //err
})
示例 1
const arr = [1,2,3,4,5,20,543,623,1234134,656,54325,62463,12412];
let resArr = [];

const returnPromise =(number)=>{
//返回一个Promise对象 且只有resolve
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(number % 4 === 0){
                resolve(true);
            }
            resolve(false);
        },1500)
    })
}

//用map函数遍历调用returnPromise()
const promises = arr.map(returnPromise);

//封装多个promise对象 只有当所有对象执行完成之后
Promise.all(promises).then((res)=>{
    resArr = res;
    console.log(resArr);
    //1500ms之后resolve
    //[ false,false,false,true,false,true,false..]
    //process other
}).catch((err)=>{
    console.log(err);
})

//此时Promise对象状态还在pending
console.log(resArr);//[]
注意 ⚠️
  1. 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
  2. Promise.all方法的参数可以不是数组,但必须具有 Iterator 接口,且返回的每个成员都是 Promise 实例。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值