Promise处理异步的并行和串行

一、异步的“并行”

同时处理,相互之间没啥依赖

// 执行FN1返回一个promise实例,实例中管理了一个异步编程的代码,当定时器到时间后,才会把实例的状态改为成功
const fn1 = () => {return new Promise(resolve => {setTimeout(() => {resolve(1);}, 1000);});
};
const fn2 = () => {return new Promise(resolve => {setTimeout(() => {resolve(2);}, 2000);});
};
const fn3 = () => {return new Promise(resolve => {setTimeout(() => {resolve(3);}, 3000);});
}; 

// 异步的“并行”:同时处理,相互之间没啥依赖
fn1().then(result => {console.log(result);
});
fn2().then(result => {console.log(result);
});
fn3().then(result => {console.log(result);
}); 

并行中的综合处理

一起发送多个请求(处理多个异步),但是需要等到所有异步都成功,我们再整体做啥事!!

  • 语法:let promise = Promise.all([promise1,promise2,…]);* 执行Promise.all返回一个新的promise实例 @P* 并且传递一个数组,数组中包含N多其它的promise实例* 如果数组中的每一个promise实例最后都是成功的,则@P也将会是成功的,它的值也是一个数组,按照顺序依次存储各个promise实例的结果;但凡数组中的某个promsie实例是失败的,则@P也是失败的,值是当前这个实例失败的原因!* 如果数组中有一项并不是promise实例(例如:是个100),则浏览器也会把其默认变为一个状态是成功的promsie实例,值就是当前项本身```
    let p = Promise.all([Promise.resolve(100), fn1(), 200, fn3(), fn2()]); //浏览器默认会把200 变为一个成功的promsie实例
    p.then(results => {console.log(成功:${results}); // 成功:100,1,200,3,2 顺序和最开始是一致的,不会考虑谁先成功
    }).catch(reason => {console.log(失败:${reason});
    });

//new Error(‘xxx’)不是promise实例=》Promise.resolve(new Error(‘xxx’)) 值是Error对象
let p = Promise.all([Promise.resolve(100), fn1(), new Error(‘xxx’), Promise.reject(200), fn3(), fn2()]);
p.then(results => {console.log(成功:${results});
}).catch(reason => {console.log(失败:${reason}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值