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

    1. function createPromise(t) {
    2.     return new Promise(function(resolve, reject) {
    3.         setTimeout(()=>{
    4.             console.log('f1');
    5.             resolve();
    6.         }, t*1000);
    7.     });
    8. }
    9. let arr=[1,1,2,3,2],promiseArr=[];
    10. for(let i=0;i<arr.length;i++){
    11.     promiseArr.push(createPromise(arr[i]));
    12. }
    13. Promise.all(promiseArr).then(rs=>{
    14.     console.log('finish');
    15. });

    可以用reduce简化下代码:

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

    所有评论

      相关文章