1

node-webkit アプリ内で nodejs async モジュール (ウォーターフォール メソッド) を使用しようとしていますが、正しく動作しません。チェーンの最後のアイテムに直接ジャンプし、他のすべてを無視しているようです。ただし、私のコードは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 にはこれに関する未解決の問題があります ( issue #302 )。問題は、ノードが (vm モジュールを使用して) 新しい環境を作成するときに、内部で async が使用する配列チェックが無効であることです。

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 に答える