【问题标题】:about complicated biz logic in async关于异步中复杂的商业逻辑
【发布时间】:2020-04-03 09:11:31
【问题描述】:

我是 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();

【问题讨论】:

    标签: node.js async.js


    【解决方案1】:

    一种选择(免责声明:不是很优雅...)是在全局范围内定义变量(因此它们可以在任何地方访问),然后使用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,这将更具可读性。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      相关资源
      最近更新 更多