Node.js 节点中许多异步任务的设计模式

Node.js 节点中许多异步任务的设计模式,node.js,design-patterns,asynchronous,Node.js,Design Patterns,Asynchronous,我正在学习node并编写一个API。我的一个API调用使用一个名为Tags的参数,该参数将包含逗号分隔的标记,每个标记我都希望保存到磁盘(我使用的是MongoDB+Mongoose)。通常,当我在API中保存到DB时,我会传递一个回调并在该回调的内部保存之后继续,但是这里我有一个可变数量的对象要保存到磁盘,我不知道如何将所有这些标记保存到磁盘,然后保存引用它们的对象。有人能推荐一个干净的异步模式使用吗?谢谢 是执行这些任务的良好节点库 并行或串行运行多个异步调用,然后触发一个回调: async.

我正在学习node并编写一个API。我的一个API调用使用一个名为Tags的参数,该参数将包含逗号分隔的标记,每个标记我都希望保存到磁盘(我使用的是MongoDB+Mongoose)。通常,当我在API中保存到DB时,我会传递一个回调并在该回调的内部保存之后继续,但是这里我有一个可变数量的对象要保存到磁盘,我不知道如何将所有这些标记保存到磁盘,然后保存引用它们的对象。有人能推荐一个干净的异步模式使用吗?谢谢

是执行这些任务的良好节点库

并行或串行运行多个异步调用,然后触发一个回调:

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(标记、回调),并在每个作业完成时调用allDone。如果您需要连续地(一个接一个地)处理数据,这里有另一种模式:

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

+1用于异步。。。这里有很多工作流选项,瀑布方法是我最喜欢的工具脚本。