门 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
的竞争条件