【问题标题】:NodeJs Async.waterfall within Node-WebkitNode-Webkit 中的 NodeJs Async.waterfall
【发布时间】:2013-06-27 23:22:43
【问题描述】:

我正在尝试在 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']
});

【问题讨论】:

  • 我在 node-webkit 和 Node.js 中运行了您的代码,但结果是相同的“未定义”。
  • 嗯——奇怪的是,如果我在 Node.js 中运行它,它会在 Node-Webkit 中返回“完成”,它会为我返回“未定义”!

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


【解决方案1】:

这是 async 模块的一个错误,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)) {

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

【讨论】:

  • 谢谢你 - 我最终将所有使用异步库的代码放入一个单独的文件中,然后“需要”它。这似乎可以解决问题,但我会尝试您的建议和新的 nwglobal 模块 - github.com/Mithgol/nwglobal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2014-02-15
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多