2016-01-18 33 views
2

我的异步代码段...是否可以限制节点中的异步任务?

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

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

像,如果我只想让一次只能做一个文件呢?

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

任何想法?

+0

'forEachOfLimit'? –

+0

所以...你知道async有你想要的选项,但你希望我们将你的代码转换为其他选项之一.. –

+0

你甚至没有看看[文档](https: //github.com/caolan/async#documentation),是吗?只需使用'async.eachLimit'。 – Bergi

回答

0

你可以尝试使用(每天)代替的foreach

var count = 0; 
var totalcount = 5; 
async.every(function() { 
// Do something. 
count++; 
if (count == 5) 
    return false; 
    else return true; 
}); 
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); 
} 

它在mapdescription提及。

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'); 
     } 
    } 
); 
+0

谢谢!那很完美! – MickeyThreeSheds

+0

@MickeyThreeSheds当有人提供一个很好的答案时,你应该upvote :)在这一点上,我upvoted为你。 –