2012-10-29 30 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