在Node.js中处理多个异步任务的设计模式

4

我正在学习Node.js并编写API。我的一个API调用需要一个名为Tags的参数,该参数将包含逗号分隔的标签,我想将每个标签保存到磁盘中(我使用MongoDB + Mongoose)。通常,在我的API中保存到数据库时,我会传递回调函数并在其中继续保存操作,但是在这里,我有多个对象需要保存到磁盘,并且我不知道最干净的方法是将所有这些标签保存到磁盘上,然后再保存引用它们的对象。有没有人能建议一个干净的异步模式来使用?谢谢!

2个回答

8
async 是一款非常适用于这些任务的 Node.js 库,可以并行或串行运行多个异步调用,并在所有调用完成后触发一个回调函数。
async.parallel([
    function(){ ... },
    function(){ ... }
], callback);

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接