我是node.js的新手,并且对异步有一些困惑的问题。请参见下面的代码。
var async = require('async');
const func = function func(cb) {
cb(null, 'hello');
}
const func1 = function func1(param1, cb) {
console.log(param1);
cb(null, 'hello', 'world');
}
const func2 = function func2(param1, param2, cb) {
console.log(param1, ' ', param2);
cb(null, 'result');
}
async.waterfall([func, func1, func2], (err, result)=> {
console.log(result);
});
是的,我们知道该函数将一一运行。我的问题是,是否有一些基于函数结果不同的复杂条件逻辑。这是否意味着我必须使用await并重新编写函数的返回码?
async function doIt() {
const t= await func(parms);
... biz logic ...
const t1= await func1(t);
... biz logic ...
const t2= await func2(t1);
... biz logic ...
}
doIt();
答案 0 :(得分:0)
一种选择(免责声明:不是很优雅...)是在全局范围内定义变量(以便可以在任何地方访问它们),然后使用async.series
执行所需的任何顺序任务或复杂逻辑执行:
var async = require('async');
var param1;
...
var result;
async.series([
function(cb) {
func(function() {
param1 = ...;
cb(null);
}
},
function(cb)
// biz logic
},
function(cb) {
func1(param1, function() {
cb();
}
},
// etc.
], function(err) {
if (err) {
console.error(err);
} else {
console.log(result);
}
});
否则,您可以使用promise,它将更加易读。