5

' n '非同期関数が実行され た後、どのようにコールバックを実行できるかわかりません。例:

var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})

after4AsyncOperation関数をもう一方の内部に記述せずに、4つの非同期関数の後に実行する方法はありますか?例:

    var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    process.nextTick(function(){
        //do stuff
        process.nextTick(function(){
            //do stuff
            process.nextTick(function(){
                //do stuff
                after4Asyncoperation();
            })
        })
    })
})
4

2 に答える 2

8

CaolanのAsyncなどの非同期ライブラリを使用することをお勧めします。async.parallel次に、、、、async.seriesまたはを使用できますasync.autoauto最も柔軟性がありますが、他のものより少し遅いです。どちらかを選択するparallelseries、実行しようとしていることに関する詳細情報が必要になります。最初の例は並列操作ですが、2番目の例は直列です。

ただし、ライブラリを使用したくない場合は、カスタムで何かを書くことができます。私はそれを次のようにします:

var numFuncs = 4;
var callback = function(){
  numFuncs--;
  if(numFuncs == 0) {
    after4AsyncOperation();
  }
}
var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})

これは、コールバックが呼び出されると予想される回数()からカウントダウンし、適切な回数だけコールバックされたときにnumFuncsのみ呼び出すことで機能します。after4AsyncOperation

于 2013-02-17T18:35:26.073 に答える
3

この機能と他の多くの優れた機能を備えた優れた非同期ライブラリを利用できます。あなたがやろうとしていることを具体的に達成するために、あなたはどちらかのシリーズを使うことができます:

https://github.com/caolan/async#series

または並列:

https://github.com/caolan/async#parallel

2つの違いは、直列ではすべての関数が次々に実行されるのに対し、並列ではすべての関数が同時に実行されることです。いずれの場合も、すべて完了した後にコールバックがあります。これは、達成しようとしているように見えます。

于 2013-02-17T17:20:24.520 に答える