【问题标题】:Is it possible to limit async tasks in node?是否可以限制节点中的异步任务?
【发布时间】:2016-04-24 05:34:31
【问题描述】:

我有以下异步代码部分:

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

它会打印我列表中所有文件的名称,太好了。现在,我想限制并行处理的文件数量。如果我一次只想处理一个文件怎么办?

我听说过async.ParallelLimitasync.Queue,并且想知道如何调整此代码以适应其中一个,特别是parallelLimit

有什么想法吗?

【问题讨论】:

  • 所以...您知道 async 具有可以满足您需求的选项,但您希望我们将您的代码转换为其他选项之一..
  • 你甚至没有看the docs,是吗?只需使用async.eachLimit

标签: javascript node.js asynchronous


【解决方案1】:

我认为你需要的是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');
        }
    }
);

【讨论】:

  • 谢谢!太完美了!
  • @MickeyThreeSheds 当有人提供好的答案时,你应该投票赞成 :) 在这一点上,我为你投票。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我认为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);
    }
    

    mapdescription中有提到。

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多