是否可以使用async.parallelLimit设置并行运行进程的限制?我使用了以下非常简单的代码来测试它是如何工作的。

var async = require("async");
var i = 0;

function write() {
    i++;
    console.log("Done", i);
}

async.parallelLimit([
    function(callback) {
        write();
        callback();
    }
], 10, function() {
    console.log("finish");
});

当然我得到的是:
Done 1
finish

在我的例子中,函数wich经常被调用,但我只希望它同时运行5次。其他电话应该排队。(是的,我知道async.queue,但这不是我在这个问题上想要的)。
所以现在的问题是,async.parallelLimit是否可以做到这一点?
//编辑:
我有类似的东西:
for(var i = 0; i < somthing.length; i++) { //i > 100  for example
    write();
}

由于node.js的不同步性,它可以同时运行100次。但是在这种情况下,我如何限制并行运行的进程呢?

最佳答案

很简短的回答;是的。这正是AsyncParallelLimit所做的。
在您的例子中,您只向parallelLimit传递一个函数。这就是为什么只叫一次。如果要多次传递具有相同函数的数组,则执行次数与放入数组的次数相同。
请注意,示例函数实际上并不异步地执行任何工作。因此,这个示例函数将始终以串行方式执行。如果您有一个执行异步工作的函数,例如网络请求或文件I/O,它将并行执行。
异步工作负载的一个更好的示例函数是:

function(callback) {
    setTimeout(function(){
        callback();
    }, 200);
}

07-27 13:22