门 Gate 机制
这多个任务的完成顺序不重要,重要的是都完成了
const promise1 = PromiseA;
const promise2 = PromiseB;
Promise.all([promise1, promise2])
.then(function(values) {
// do something
});
promise1, promise2 的值,同时值的顺序与 Promise 传入的顺序有关,与 Promise 完成顺序无关[promise1, promise2] 中其中一个 promise 遭到了 reject 后,Promise.all 整个 Promise 都会被拒绝门闩,竞态
只响应第一个完成的 Promise, 同时抛弃其他 Promise
const promise1 = PromiseA;
const promise2 = PromiseB;
const immediateValue = 1;
Promise.race([promise1, promise2, immediateValue])
.then(function(value) {
// do something
});
Promise.race 接受一个数组作为参数,数组中的元素可以为 Promise, thenable, 立即值
value 只有一个值,即竞争中胜出的值超时竞赛
Promise.race([foo(), timeoutPromise(3000)])
.then(function() {
// foo() 在竞争中胜出,在 3 秒内完成了
}, function(err) {
// foo() 执行失败,被拒绝了,或者没有在 3 秒内完成
});
Promise.all([...])Promise.all([...])Promise.any 的竞争条件,只要传入的第一个 Promise 完成,后续的拒绝和完成都会被忽略Promise.first 的竞争条件