1

Nodejsにはprocess.nextTick(fn)、次のティックまで関数の実行を遅らせるメソッドがあります。この記事によると、これを使用して、次のようなオブジェクトのコンストラクターでイベントを発行できます(アーティスからコピー)。

function StreamLibrary(resourceName) {      
    var self = this;

    process.nextTick(function() {
        self.emit('start');
    });

}

var stream = new StreamLibrary('fooResource');

stream.on('start', function() {
    console.log('Reading has started');
});

これがなければprocess.nextTick、イベントを聞く機会が得られる前にイベントが発行されていたため、機能しませんでした。ただし、イベントリスナーを追加する前に、イベントが発行されないことをどのように確認できますか?完全に非同期の場合、コンストラクターが終了する前に次のティックが実行される可能性があるため、イベントリスナーは無視されます。では、このプロセスの背後にあるルールは何ですか?ノードはいつnextTickを実行しますか?

4

1 に答える 1

3

次のティックは...次のティックで実行されます。ここでの混乱は、「完全に非同期」という意味だと思います。

Node.jsを使用すると、すべてのコードが単一のスレッドで実行されます。現在のティックが終了するまで、次のティックにスケジュールされたコードは実行されません。

したがって、コンストラクター内の次のティックからイベントを発行すると、ハンドラーをアタッチする可能性のあるコードはすべて、その次のティックが発生する前に実行が終了します。

ノードの非同期のマルチスレッド部分は、ネットワークやIOなどの操作を処理します。これらの関数呼び出しは、JavaScriptコードの実行中に実行されますが、データがコードに戻されると、次のティックまで実行されません。

于 2012-09-09T19:57:50.770 に答える