dynamic数组承诺序列

我得到dynamic(承诺的数量可以改变每个运行时)承诺数组,现在我希望每个决心或拒绝之后处理返回的承诺之前承诺数组将完成。

承诺尽全力,但是在所有的承诺完成之后,这一切都将继续下去。

如果数组(承诺)不是dynamic的,所以我可以简单地使用这样的事情,但我不知道我在数组中有多less承诺,我希望在每一个承诺履行或…继续与它的答案而不是等到所有的承诺完成

firstMethod() .then(secondMethod) .then(thirdMethod); 

我们正在使用Q …

可能吗 ?

更新(示例)

可以说我有promise数组

 [promise1,promise2,promise3, promiseN] 

现在我要用promise1完成处理, 然后不等所有的承诺完成。

这里最大的问题是数组可以有N个承诺,我不知道在RT多less诺言,我会得到,直到我得到这个数组, 因此我不能简单地使用

更新2 (澄清更多:-)) 棘手的部分…

如果我事先知道数组的大小,那么我可以简单地使用数组5链中的条目,但是这里的棘手部分是,我不知道在承诺数组中有多less承诺… 。

如果目标是将每个承诺链接在一起,而不是等待所有的承诺完成,这只是一个循环:

 for (const promise of promiseArray) { promise.then(...) } 

如果承诺的结果应该结合在一起,arrays可以另外处理:

 Promise.all(promiseArray.map(promise => promise.then(...))) .then(...) 

注意这里all行为all适用。 如果承诺arrays中存在未被捕获的拒绝,则只有第一次拒绝将被捕获。

对于大多数承诺实现来说都是如此。 可能有Q方法允许这样做更容易。

你可以使用Promise.race()

Promise.race(iterable)方法返回一个承诺,一旦迭代器中的承诺之一解决或拒绝,承诺的价值或原因就解决或拒绝。

 var p1 = new Promise(function(resolve, reject) { setTimeout(resolve, 500, 'one'); }); var p2 = new Promise(function(resolve, reject) { setTimeout(resolve, 100, 'two'); }); Promise.race([p1, p2]).then(function(value) { console.log(value); // "two" // Both resolve, but p2 is faster }); 

如果你不需要链接承诺。 你可以做:

 var tasks = [[promise1, handler1], [promise2, handler2], [promise3, handler3]]; tasks.forEach(function (task) { var promise = task[0]; var handler = task[1]; promise.then(handler) });