Promise.all和Promise.race区别,和使用场景
参考:https://www.cnblogs.com/richard1015/p/9155564.html
https://segmentfault.com/q/1010000012736340?sort=created
一、Pomise.all的使用
常见使用场景 : 多个异步结果合并到一起
Promise.all可以将多个Promise实例包装成一个新的Promise实例。用于将多个Promise实例,包装成一个新的Promise实例。
1.它接受一个数组作为参数。
2.数组可以是Promise对象,也可以是其它值,只有Promise会等待状态改变。
3.当所有的子Promise都完成,该Promise完成,返回值是全部值的数组。
4.如果有任何一个失败,该Promise失败,返回值是第一个失败的子Promise的结果。
二、Pomise.race的使用
类似于Promise.all() ,区别在于 它有任意一个返回成功后,就算完成,但是 进程不会立即停止
常见使用场景:把异步操作和定时器放到一起,如果定时器先触发,认为超时,告知用户
Promise.race
在第一个promise
对象变为Fulfilled
之后,并不会取消其他promise
对象的执行。只是只有先完成的Promise
才会被Promise.race后面的then
处理。其它的Promise还是在执行
的,只不过是不会进入
到promise.race
后面的then
内。
Promise.all
和Promise.race
都是有使用场景的。
有些时候我们做一个操作可能得同时
需要不同的接口返回的数据,这时我们就可以使用Promise.all
;
有时我们比如说有好几个服务器的好几个接口都提供同样的服务
,我们不知道哪个接口更快,就可以使用Promise.race
,哪个接口的数据先回来我们就用哪个接口的数据。