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