节点中许多asynchronous任务的devise模式

我正在学习节点并编写一个API。 我的一个API调用需要一个名为Tags的参数,这个参数将包含逗号分隔的标签,每个标签都要保存到磁盘(我正在使用MongoDB + Mongoose)。 通常当我保存到我的API中的数据库时,我传递一个callback,并保存在callback的内部进行,但在这里我有一个可变数量的对象保存到磁盘,我不知道最简单的方法来保存所有把这些标签保存到磁盘,然后保存后面引用它们的对象。 任何人都可以build议一个干净的asynchronous模式使用? 谢谢!

async是这些任务的好节点库。

并行或串行运行多个asynchronous调用,然后触发一个单一的callback:

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

这是我经常使用的通用代码模式,当我不需要额外的依赖时:

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

此代码将为每个数组项目并行运行doAsyncJob(标记,callback),并在每个作业完成时调用allDone。 如果您需要连续处理数据(每个数据都是一个接一个),这里有另一个模式:

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