之前讲过将一个数组中的Promise串行(一个接一个)执行的方法: reduce使用Promise.resolve()构造连续Promise回调。那么如何将数组中的内容并行呢?很自然想到Promise.all和foreach:

function createPromise(t) {
    return new Promise(function(resolve, reject) {
        setTimeout(()=>{
            console.log('f1');
            resolve();
        }, t*1000);
    });
}
let arr=[1,1,2,3,2],promiseArr=[];
for(let i=0;i<arr.length;i++){
    promiseArr.push(createPromise(arr[i]));
}
Promise.all(promiseArr).then(rs=>{
    console.log('finish');
});

可以用reduce简化下代码:

function createPromise(t) {
    return new Promise(function(resolve, reject) {
        setTimeout(()=>{
            console.log('f1');
            resolve();
        }, t*1000);
    });
}
let arr=[1,1,2,3,2];
Promise.all(arr.reduce((prev,next)=>{return prev.concat(createPromise(next));},[])).then(rs=>{
    console.log('finish');
});
回到顶部
我要评论

所有评论

返回
邮箱:
绑定
取消
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

邮箱:
绑定邮箱后,若有回复,会邮件通知。
提交
还可以输入500个字