NodeJs中的NodeJs Async.waterfall

时间:2013-06-30 19:57:24

标签: node.js asynchronous node-webkit node-async

我正在尝试在node-webkit应用程序中使用nodejs async模块(瀑布方法),但它无法正常运行。它似乎直接跳到链中的最后一项并忽略其他一切。我的代码在nodejs中完美运行。我认为它可能是我的代码,但即使是async文档中的以下示例也是如此。

 async.waterfall([
    function(callback){
        callback(null, 'one', 'two');
    },
    function(arg1, arg2, callback){
        callback(null, 'three');
    },
    function(arg1, callback){
        // arg1 now equals 'three'
        callback(null, 'done');
    }
], function (err, result) {
    console.log(result)
    // result now equals 'done'
});

但是,以下使用async.series方法的示例可以正常工作:

async.series([
function(callback){
    // do some stuff ...
    callback(null, 'one');
},
function(callback){
    // do some more stuff ...
    callback(null, 'two');
}
],
// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});

1 个答案:

答案 0 :(得分:1)

这是异步模块的一个错误,Github上存在一个关于此问题的开放问题(issue #302。)问题是当节点创建一个新环境(使用vm模块)时,该数组检查异步使用内部无效。

我通过更改lib/async.js中第472行的数组检查来修复此问题:

async.waterfall = function (tasks, callback) {
    callback = callback || function () {};
    if (tasks.constructor !== Array) {

为:

async.waterfall = function (tasks, callback) {
    callback = callback || function () {};
    if (!Array.isArray(tasks)) {

有一些拉动请求可以解决这个问题,所以希望很快就会解决这个问题。