我为stormjs做了Nodejs: How to write high performance async loop,你可以查看stormjs serial loop demo
但是仍然存在并行循环的问题,例如我们有一个函数requestContext(index, callback(err, context))
远程获取上下文' http://host/post/ {index}',我们需要获取[0-99]
的上下文并将上下文推送到数组中订单,[context0...context99]
但显然这个输出无法正常工作stormjs parallel loop
我仍然想知道节点制作者是如何完成这项任务的,但是你必须使这些请求并行,而不是逐一进行,它应该是并行请求和串行推送。
答案 0 :(得分:1)
var counter = 0;
// create an array with numbers 0 to 99.
_.range(0,100).forEach(function(key, value, arr) {
// for each of them request context
requestContext(key, function(err, context) {
// add the context to the array under the correct key
if (!err) {
arr[key] = context;
}
// increment counter, if all have finished then fire finished.
if (++counter === 100) {
finished(arr);
}
});
});
function finished(results) {
// do stuff
}
不需要风暴。如果你想要一个执行/流控制库我会推荐Futures,因为它不会编译你的代码并“隐藏魔法”。
之前,您通过每个序列进行了递归并按顺序执行它们,然后将它们按顺序推送到数组中。
这次你并行执行它们并告诉每个人将数组中正确的有序键分配给它们自己的值。
_.range
创建一个包含0到99值的数组。