2011-01-06 20 views
6

それぞれがコールバックを次のコールバックに渡す一連の関数を実行しようとしています。今のところは(!私はポストとして、私はそれを書き換えています、いずれかのマイナーなエラーを言い訳)次のようになります。node.jsでAsyncの滝を使用するときの "err"引数

function func1(callback) { 
    callback(null, "stuff"); 
} 

function func2(input, callback) { 
    callback(null, "foo" + input); 
} 

async.waterfall([func1, func2], function(err, result) { 
    sys.puts(result); 
}); 

私の最初の質問は「それができるので、私は優雅に、この機能を開始するかどうかはわかりませんということです入力を取る。私は最終的にはローカル関数でそれをラップするつもりですが、それでも私はやや不安です。

第2に、これはうまくいくが、私は "err"引数がこれにどのように影響するのか考えていない。引数のリストに挿入しようとすると、さまざまな方法でブレークします。私は、個々の関数のエラーをキャッチすることができるようにしたいと思います - または、私は最後のコールバックにエラーがあるので、これが必要ですか?

答えて

14

通常、匿名関数ではWaterfallが使用されるため、パラメータは外部スコープから取得されます。

errの動作は単純です。コールバック関数の最初の引数waterfallがtrueに評価されるものを指定すると、mainコールバックが停止して呼び出されます。

function doStuff(foo, bla) { 
    // more setup here 

    async.waterfall([ 
     function(callback){ 
      try { 
       // something that might explode 
       callback(null, foo, bla); 

      } catch (e) { 
       callback(e); 
      } 
     }, 

     function(arg1, arg2, callback){ 
      callback(null, 'three'); 
     }, 

     function(arg1, callback){ 
      callback(null, 'done'); 
     } 
    ], 

    function (err, status) { 
     // if the above try/catche catches something, we will end up here 
     // otherwise we will receive 'done' as the value of status 
     // after the third function has finished 
    }); 
} 
0

あなたは、チェーンの最初の関数への入力を渡すためにasync.constantを使用することができます。

async.waterfall([ 
    async.constant(parameter), 
    func1, 
    func2 
], function (err, result) {    
}); 

そしてもちろん第一の機能変更:

function func1(input,callback) { 
    callback(null, "stuff"); 
} 

オプションを:あなたは、 null以外の最初のパラメータを持つコールバックを呼び出すことができます。

function func1(input,callback) { 
     callback("something"); 
    } 

この場合、チェーンが停止され、そして最後の関数はERR =「何か」

ドキュメントで呼び出されます:https://caolan.github.io/async/docs.html#constanthttps://caolan.github.io/async/docs.html#waterfall

関連する問題