3

process.nextTick を使用するタイミングを把握しようとしています。以下では、非同期ライブラリを使用してコード フローを制御していますが、最後のコールバックで nextTick を呼び出す必要があるかどうか疑問に思っていました。

async.parallel([
    function (callback) {
        // do something
        callback(data);
    },
    function (callback) {
        // do something
        callback(data);        
    }
], 
// callback
function (data) {
    process.nextTick(function () {
        // do something
    });
});
4

2 に答える 2

5

nextTickあなたの「何かをする」が何であるかを正確に知らなければ、この状況で使用する必要がある理由はわかりません. nextTick関数の実行をイベント ループの次の繰り返しまで延期する理由がある場合に使用します。詳細については、理解process.nextTickをお読みください。

また、async のparallelタスク完了コールバックは引数を取るerr, dataので、次のようにする必要があることに注意してください。

async.parallel([
    function (callback) {
        // do something
        callback(null, data);
    },
    function (callback) {
        // do something
        callback(null, data);        
    }
], 
// callback
function (err, data) {
    if (err) throw err;
    // do something
});

主な違いは、並列タスクの 1 つがエラーを返した場合 ( callbacktruey の最初の引数で呼び出した場合)、最終的なコールバックがすぐに呼び出されることです。

于 2012-12-18T20:48:07.550 に答える
0

私の経験では、 forasync.parallelおよび他の同様の関数が正しく機能するには、すべてのタスクを確実に非同期にする必要があります。私は async lib が大好きで、promise などよりも一番の選択肢ですが、タスクを強制的に非同期にしないと、奇妙な動作が発生する可能性があります。

ここを参照してください: https://github.com/caolan/async#common-pitfalls-stackoverflow

したがって、次のようになります。

async.parallel([

function(cb){
   process.nextTick(function(){
          doSomePotentiallySyncThing(cb);
   });
},

function(cb){
   process.nextTick(function(){
          doSomePotentiallySyncThing(cb);
   });
},
function(cb){

     definitelyAsync(cb);  // if it's **definitely** async, then we don't need process.nextTick

}
], function complete(err, results){

    // we are in the final callback

});

私はこれについて99%確信しています。

于 2016-03-30T06:11:12.250 に答える