我试图在节点js中使用异步,以控制某些函数的执行流程。在下面的代码中,我有三个声明的函数,它们分别打印“1”、“2”和“3”,同时执行其他任务(只有这样,我才能看到什么时候执行)。
async.waterfall([
function(callback) {
settings();
console.log("1");
callback(null, 'one');
},
function(callback) {
profile();
console.log("2");
callback(null, 'two');
},
function(callback) {
console.log("3");
groups();
callback(null, 'two');
}
]);因此,我得到了回调行中的错误“回调不是函数”(null,‘2’);老实说,可能是一个非常愚蠢的问题,而且我也不完全理解异步瀑布是如何工作的。但我确实尝试过,通过阅读示例,尝试实现简短的代码,并尝试使用它。
有趣的是,如果使用async.series而不是async.waterfall,就没有这样的错误。然而,async.series将打印1,2,3,3,1,2。瀑布模型内的数字按顺序打印,但内部的函数没有按正确的顺序执行。
需要注意的是,前两个函数--设置和配置文件--包括db读取和计算,而第三个函数只打印一些结果。
发布于 2016-10-26 19:00:55
瀑布
首先,我建议您使用异步自动代替瀑布模型,原因是在瀑布模型中,我们将一个接一个地移动,首先我们将完成第一个函数的执行,然后再转到第二个,然后第三个,即,不管我们的功能是否相互依赖,我们都会进行一个系列。
自动
auto的好处在于,如果您的函数是相互依赖的,这并不重要,因为auto可以串联运行任务(对于依赖函数)和并行任务(对于不相互依赖的函数)。
async.auto({
get_data: function(callback) {
console.log('in get_data');
callback(null);
},
make_folder: function(callback) {
callback(null);
},
write_file: ['get_data', 'make_folder', function(results, callback) {
callback(null);
}],
email_link: ['write_file', function(results, callback) {
callback(null);
}]
}, function(err, results) {
});在上面的例子中,我们有不相互依赖的get_Data函数和make_folder函数,因此我们可以并行地运行它们,通过传递get_Data & make_folder的名称,我们可以将write_file函数限制为只在执行上述两个函数之后才能运行。
有关更多详细信息,请访问http://caolan.github.io/async/docs.html#auto
甚至看一看async.autoInject,它最近被添加到异步而不是auto。但是auto将继续用于异步的珍贵版本。
https://stackoverflow.com/questions/40269584
复制相似问题