异步篇:Promise.all() & .race()

  一般 Promise 是采用 Promise 链的顺序控制流程的,Promise 还有其他异步模式,用来简化异步的流程控制,易于追踪。

一. Promise.all([…])

  在异步序列中,任意时刻只能有一个异步任务执行,如果想同时执行,怎么实现呢?可以用到 Promise.all([…]),它并不能让两个异步任务同时执行,但是可以让两个异步任务执行完了之后再让后面的流程继续执行,相对于这两个异步任务之外的流程来说,它们是同时执行的。

// 假定 ajax 是Promise
var p1 = ajax("http://xxx.111.xxx");
var p2 = ajax("http://xxx.222.xxx");

Promise.all([p1,p2])
	.then(function(data){
	// p1 p2 执行之后传入它们收到的消息
		return ajax('http://xxx.333.xxx' + data.join(','));	
	})
	.then(function(data){
		console.log(data);
	})
  • Promise.all([…])需要传入一个数组,一般由 Promise 实例组成。数组中的所有 Promise 完成后,主 Promise 才会完成,如果其中有一个 Promise 拒绝,主 Promise 会立刻拒绝,其他完成的结果也会被抛弃。
二. Promise.race([…])

与 .all() 相对应,有时候期望同时执行许多 Promise ,但是只要有一个完成就够了,这种时候可以用到 Promise.race([…])。

  • 接收的参数和 all 一样,可以是 Promise ,带 then 的对象或立即值,但是立即值没有什么意义,因为它们的顺序会是数组最前面一个最先完成。
  • 同样,只要有一个 Promise 完成,.race(…) 就会立刻完成,一旦有一个为拒绝,.race(…) 就会拒绝。
  • 如果 .race(…) 传入的是空数组,.race(…) 永远不会决议,不会立即决议。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值