Promise.some
Promise.some(
Iterable<any>|Promise<Iterable<any>> input,
int count
) -> Promise
给定一个Iterable
(数组是Iterable
),或者一个可迭代的 promise,它产生 promise(或 promise 和值的混合),迭代遍历 Iterable
中所有的值放入一个数组中,一旦数组中的 有 count
个 promise 被履行则返回一个已履行的 promise。promise 的履行值是一个带有 count
值的数组,按照它们履行的顺序。
这个例子是 ping 的 4 个命名服务器,并在控制台上记录最快的2 台:
Promise.some([
ping("ns1.example.com"),
ping("ns2.example.com"),
ping("ns3.example.com"),
ping("ns4.example.com")
], 2).spread(function(first, second) {
console.log(first, second);
});
如果太多的 promise 被拒绝,以至于 promise 永远无法兑现,那么它就使用拒绝理由的 AggregateError
立即拒绝,a按照它们被扔进去的顺序。
你可以从 Promise.AggregateError
获得一个AggregateError
的引用。
Promise.some(...)
.then(...)
.then(...)
.catch(Promise.AggregateError, function(err) {
err.forEach(function(e) {
console.error(e.stack);
});
});