【发布时间】:2016-12-24 21:27:37
【问题描述】:
挑战:
- 我们希望为项目的子项发出 N 个并行 ajax 请求。
- 返回后,我们希望按顺序处理它们 (1...N)
- 我们不想等待所有承诺返回,但我们希望在它们返回时按顺序处理它们。
例如:
即使 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")
}
鉴于坚持使用提供的工具的限制,我们如何才能并行调用,但按顺序处理它们的返回?
【问题讨论】:
-
AJAX1、AJAX2等是什么?他们是承诺吗? -
是的,你可以做出承诺
-
好的。所以你会延长链条N次? 20岁呢?
-
可惜你没有使用bluebird ;)
标签: javascript asynchronous ecmascript-6 generator q