Node-Webkit中的NodeJs Async.waterfall

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

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

这是asynchronous模块的一个bug,在Github上有一个关于这个的问题 ( 问题#302 )。问题是当节点创build一个新的环境(使用vm模块),数组检查内部的asynchronous使用是无效的。

我通过更改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)) { 

有几个pull请求可以解决这个问题,所以希望这个问题很快就能解决。