我正在学习节点并编写API。我的一个API调用带有一个名为Tags的参数,它将包含逗号分隔的标记,每个标记都要保存到磁盘(我使用的是MongoDB + Mongoose)。通常当我在我的API中保存到DB时,我传递一个回调并在该回调中保存后进行,但是这里我有一个可变数量的对象要保存到磁盘,我不知道保存所有的最干净的方法这些标签到磁盘,然后保存后来引用它们的对象。任何人都可以建议使用干净的异步模式吗?谢谢!
答案 0 :(得分:8)
async是用于完成这些任务的好节点库..
并行或串行运行多个异步调用,然后触发一个回调:
async.parallel([
function(){ ... },
function(){ ... }
], callback);
async.series([
function(){ ... },
function(){ ... }
]);
答案 1 :(得分:3)
当我不想要其他依赖项时,这是我经常使用的常见代码模式:
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();
}
})();