ES6之Promise.all()函数

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/Ruffaim/article/details/82260524

参考文章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 实例。

猜你喜欢

转载自blog.csdn.net/Ruffaim/article/details/82260524