1

async的waterfall提供了一种串行的执行流,将所有异步函数串联起来,只有前面的操作执行完了才会执行后面的操作。
代码如下:

var async = require('async');

async.waterfall([function(cb) {
        cb(null, 'hello');
    }, function(param1, cb) {
        console.log(param1);
        cb(null, 'hello', 'world');
    }, function(param1, param2, cb) {
        console.log(param1, ' ', param2);
        cb(null, 'result');
    }], function(err, result) {
        console.log(result);
});

输出:

hello
hello world
result

通过代码可以很清楚地看到,各个异步函数之间是通过cb(callback)来传递函数执行结果给下一个异步函数的。
这里需要注意的是cb的第一个参数,如果cb的第一个参数不为null,代表有错误,则该异步函数之后的所有异步函数都将跳过,直接执行function(err,result){}。

将代码修改为如下:
var async = require('async');

async.waterfall([function(cb) {
        cb('some error', 'hello');
    }, function(param1, cb) {
        console.log(param1, ' ', 'from first async function');
        cb(null, 'hello', 'world');
    }, function(param1, param2, cb) {
        console.log(param1, ' ', param2, ' ', 'from second async function');
        cb(null, 'result');
    }], function(err, result) {
        if(err){
            console.log(err);
        }
        console.log(result, ' ', 'from the end function');
});

输出:

some error
hello from the end function

可以通过调整各个异步函数中的cb函数调用的参数来观察结果。


_Sunshine
58 声望2 粉丝

引用和评论

0 条评论