是否可以限制节点中的异步任务?

时间:2016-01-18 22:13:30

标签: javascript node.js asynchronous

我有以下的异步代码部分......

        async.forEach(list, function(file, loopCallback)
        {
            console.log("file");
            loopCallback();
        },
        {
            console.log("all done!");
        });

哪个好,它会打印我列表中所有文件的名称。大。但现在,让我们想象一下,我想限制我一次为它做的文件数量。

比如,如果我只想让它一次为一个文件做这个怎么办?

我听说过async.ParallelLimit和async.Queue,并且想知道如何调整这些代码以适应其中一个(特别是parallelLimit)。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我认为您需要的是eachLimit,而不是parallelLimit。这是一个例子:

async.each(
    list,
    1, // limit
    function(file, callback) {
        console.log('Processing file ' + file);
        callback();
    },
    function(err){
        if( err ) {
          console.log('Failed to process');
        } else {
          console.log('All files have been processed successfully');
        }
    }
);

答案 1 :(得分:0)

您可以尝试使用(每个)而不是foreach

var count = 0;
var totalcount = 5;
async.every(function() {
// Do something.
count++;
if (count == 5)
   return false;
   else return true;
});

答案 2 :(得分:0)

我认为async.mapLimit就是您所需要的:

async.mapLimit([1,2,3,4,5], 3, function(value, loopCallback) {
    // will process by 3 items at time
    console.log(value);
    loopCallback(value);
}

map description中提到了它。