Nodejs:并行请求,串行响应

时间:2011-05-21 17:46:55

标签: concurrency node.js

我为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

我仍然想知道节点制作者是如何完成这项任务的,但是你必须使这些请求并行,而不是逐一进行,它应该是并行请求和串行推送。

1 个答案:

答案 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值的数组。