1

私はnode.jsで遊んでみましたが、興味深い(おそらく私にとって)ものを見つけました。次のようなコードを書きます:

var flag = false;
doSomethingAsync().on('complete', function(data) {
    console.log('from callback');
    //do somestuff
    flag = true;
});
do{
   // there I want to wait for callback result
}while(!flag);

しかし、コールバックからのログが表示されないことに気付きました。なぜこれが起こるのですか?do...while を別のループに変更しようとしましたが、同じ動作が観察されました
注:ノード内の何かに不適切な方法であることはわかっていますが、なぜこれが発生するのかを理解したいと思います

4

3 に答える 3

3

言語に関係なく、これは絶対に行わないでください。

CPU を解放しないと、起動した他のタスクをエンジンがどのように処理するかを簡単に予測できなくなります。このループにすべてのリソースを与えdoSomethingAsync、進行を停止することを決定する場合があります。その結果、ループが無限になり、コールバックが起動されなくなります。

特にnodejsでは、javascriptコードを実行するスレッドが1つしかないため(他のスレッドがIOのためにここにある場合でも)、コールバックはループが終了するまで開始されません(終了しません)。

コールバック内またはコールバックから呼び出す関数内で必要なことを行うだけです。

function goon() {
   // do other stuff
}

doSomethingAsync().on('complete', function(data) {
    console.log('from callback');
    //do somestuff
    goon();
});
于 2013-07-23T08:20:21.503 に答える