挑战:
例如:
即使2,3,5在1之前回来,我们应该保持2,3,5的结果,并且在1回复时,按顺序处理1,2,3(并等待4在5)之前回来。
工具:Q + ES6发电机
使用占位符变量
创建N-1长度数组 <=>当N = 3时的EG:let [N1,N2,N3] = yield [ Promise1, Promise2, Promise3 ]
//process items sequentially:
console.log(N1)
console.log(N2)
console.log(N3)
但是,填充一系列空变量似乎并不起作用,因为参考文献并不知道在哪里可以找到var声明
for(var i = 0; i< 3; i++) {
res.push("some empty var")
}
考虑到坚持使用提供的工具的限制,我们如何并行化调用,但是按顺序处理它们的返回?
答案 0 :(得分:2)
您可以使用Promise.all()
,.then()
javascript
会返回问题
- 我们希望为一个项目的孩子提供N个并行的ajax请求。
- 返回时,我们希望按顺序处理它们(1 ... N)
- 我们不想等待所有承诺返回,但我们希望在它们回来时按顺序处理它们。 我们怎么能并行调用,但处理他们的回报 依次?
醇>
您可以使用.then()
链接到原始函数,该函数返回一个promise或Promise
对象本身,以便在return
值之前处理promise,并按照传递给{{的参数的顺序处理1 {} Promise.all()
链接到.then()
Promise.all()
&#13;
答案 1 :(得分:1)
你可以通过等待循环中的下一个承诺来做到这一点:
const promises = […]; // or created programmatically
for (const promise of promises) {
const result = yield promise; // await them sequentially
console.log(result);
}