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请求可以解决这个问题,所以希望这个问题很快就能解决。