2012-10-29 29 views
4

我正在學習節點並編寫一個API。我的一個API調用需要一個名爲Tags的參數,該參數將包含逗號分隔的標籤,每個標籤都要保存到磁盤(我正在使用MongoDB + Mongoose)。通常,當我在API中保存到數據庫時,我會傳遞一個回調,並在保存回調之後繼續執行,但這裏有可變數量的對象以保存到磁盤,並且我不知道最簡單的方法來保存所有將這些標記添加到磁盤,然後保存之後引用它們的對象。任何人都可以建議一個乾淨的異步模式使用?謝謝!節點中許多異步任務的設計模式

回答

8

async是這些任務的好節點庫..並聯或串聯,並觸發後一個單一的回調

運行多個異步調用:

async.parallel([ 
    function(){ ... }, 
    function(){ ... } 
], callback); 

async.series([ 
    function(){ ... }, 
    function(){ ... } 
]); 
+0

+1異步...有大量的工作流有選擇,瀑布方法是我的一個絕對最喜歡我工具腳本。 – Tracker1

3

這是常見的代碼模式,我經常當使用我不想額外的依賴:

var tags = ['tag1', 'tag2', 'tag3']; 
var wait = tags.length; 
tags.forEach(function (tag) { 
    doAsyncJob(tag, done); 
}); 

function done() { 
    if (--wait === 0) allDone(); 
} 

此代碼將並行運行doAsyncJob(標籤,回調),關於陣列的每個項目,並調用allDo當每個工作完成時。如果你需要不斷地處理數據(每接一個地),這裏是另一種模式:

(function oneIteration() { 
    var item = tags.shift(); 
    if (item) { 
     doAsyncJob(item, oneIteration); 
    } else { 
     allDone(); 
    } 
})(); 
+0

不正確。 https://gist.github.com/3977518 – Anatoliy

+0

我的壞...沒有清楚地閱讀... – Tracker1