Promise串行和并行

串行和并行

Posted by Lan on September 21, 2020

串行、并行

  • 串行
    • 定义:一个接一个的执行
function f1(){
    const p1 = new Promise(function (resolve, reject) {
     setTimeout(() => reject("err"), 3000)
    })
return p1;
}
function f2(){
    const p2 = new Promise(function (resolve, reject) {
      setTimeout(() => resolve(2), 1000)
    })
return p2;
}
function f3(){
    const p3 = new Promise(function (resolve, reject) {
      setTimeout(() => resolve(3), 2000)
   })
return p3;
}
function fc(arr){
    var obj={
        rs:[],
        rj:[]
    };
    // Promise.resolve方法调用时不带参数,直接返回一个resolved状态的 Promise 对象。
    var sequence = Promise.resolve();
    arr.forEach(function (item) {
    // 第一次的 then 方法用来执行数组中的每个函数,
    // 第二次的 then 方法接受数组中的函数执行后返回的结果,
    // 并把结果添加到 data 中,然后把 data 返回。
        sequence = sequence.then(item).then(function (res) {
            obj.rs.push(res);
            
            return obj;
        },function(err){
            obj.rj.push(err);
            
            return obj;
        });
    })
    return sequence
}

fc([f1,f2,f3]).then(v=>{
    console.log(v)
})

执行结果

{ rs: [ 2, 3 ], rj: [ 'err' ] }
  • 并行
    • 定义:同时执行
      Promise.all([p1,p2,...])