4

我正在学习节点并编写 API。我的一个 API 调用采用一个名为 Tags 的参数,该参数将包含逗号分隔的标签,我希望将每个标签保存到磁盘(我使用的是 MongoDB + Mongoose)。通常,当我在我的 API 中保存到数据库时,我会传递一个回调并在该回调内部保存后继续,但是在这里我有可变数量的对象要保存到磁盘,而且我不知道保存所有对象的最干净方法将这些标签复制到磁盘,然后保存引用它们的对象。任何人都可以建议使用干净的异步模式吗?谢谢!

4

2 回答 2

8

async对于这些任务来说是一个很好的节点库..

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

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

async.series([
    function(){ ... },
    function(){ ... }
]);
于 2012-10-29T21:32:41.763 回答
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();
    }
})();
于 2012-10-29T21:39:41.680 回答