2012-07-19 49 views
1

當使用async庫進行流量控制時,特別是async.forEach如果您需要跳過特定項目,您如何正確執行回調。如何從Node.js中的異步循環返回

例子:

async.forEach(bigCollection, function(item, callback) { 

    if(skipThis) { 
     return callback(); 
     // OR BELLOW IS BETTER?? 
     //return process.nextTick(callback); 
    } 

    db.query(query, callback); 

}, callback); 

在這我不使用process.nextTick(callback)情況下,我的風險運行到堆棧溢出,如果bigCollection太大?而且,如果我確實使用process.nextTick(callback),我是否會破壞我的代碼?

我已經習慣了這樣做process.nextTick(callback)的方式,但我不太確定這是一個很好的做法。

+1

堆棧溢出?你爲什麼會遇到這個問題?我看不出第一個解決方案會導致這種情況的原因,而不是第二個解決方案。另一方面,如果你的集合**真的很大,那麼就不要再考慮半解決方案,只需將它分成較小的部分並逐一處理(例如,可以將所有內容包裝到'async.series'中並運行' async.forEach'在每一塊)。 – freakish 2012-07-19 11:19:25

回答

2

我會說沒有nextTick就沒關係。

async.forEach(bigCollection, function(item, callback) { 
    if(skipThis) { 
     return callback(); 
    } 
    db.query(query, callback); 
}, callback); 

如果bigCollection太大,那麼在進入循環之前會發生溢出。