关于异步中复杂的业务逻辑
about complicated biz logic in async
我是 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 并重新编写函数的 return 代码?
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();
一个选项(免责声明:不是很优雅...)是在全局范围内定义变量(因此它们在任何地方都可以访问),然后使用 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);
}
});
否则,你可以使用promises,这样可读性会更好。
我是 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 并重新编写函数的 return 代码?
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();
一个选项(免责声明:不是很优雅...)是在全局范围内定义变量(因此它们在任何地方都可以访问),然后使用 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);
}
});
否则,你可以使用promises,这样可读性会更好。