1

我正在尝试在 node-webkit 应用程序中使用 nodejs 异步模块(瀑布方法),但是它无法正常运行。它似乎直接跳到链中的最后一项而忽略了其他所有内容。不过,我的代码在 nodejs 中运行良好。我认为这可能是我的代码,但即使是异步文档中的以下示例也是如此。

 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']
});
4

1 回答 1

1

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

我通过更改第 472 行的数组检查来解决这个问题lib/async.js

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

到:

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

有几个拉取请求可以解决这个问题,所以希望这会很快得到解决。

于 2013-07-02T03:55:06.413 回答