私はノードが初めてで、ノードで非同期およびイベント動作の利点を使用しようとしています。私はノードから、イベントオブジェクトで処理するすべてのものを理解していましたが、それは非同期実行になります。
次に、これを試してみました。次のコードを検討してください。
var events = require("events");
var event = new events.EventEmitter();
event.on("work", function () {
for (var i = 0; i <= 10; i++) {
console.log("I do my work " + i);
}
event.emit("done");
});
var async = function (cb) {
event.on("done", cb);
event.emit("work");
for (var i = 0; i <= 10; i++) {
console.log("Async " + i);
}
}
async(function () {
console.log("I am done callback!");
});
これは非同期実行ですか?私の意見では、いいえ!なぜ、私はこの文をたくさん読んだからです:
イベントが発生するので、行って何かをして、それが終わったら戻ってきて教えてください。その間、私は別のことをします。
ファースト フード レストランのシナリオのように。しかし、上記のコードでは、イベントが発生すると、次のシーケンスが発生します。
- コールバックに入ります
- ループを通過させる
- 出力 私は仕事をします n
- done イベントを発生させた
- 出力 I am done コールバック!
- 出力非同期 n
なぜコールバックが完了したのですか。Async n の前に出力しますか? ここがファストフード店のシナリオと違うのはなぜ?
作業イベントが発生し、行って作業を行い、完了したら戻ってきます。その間、Async n を出力します
これは、イベント駆動型の動作とノードの非同期について理解するために使用されます。しかし今、私はとても混乱しています。私が知っている、javascript はシングル スレッドで動作します。イベントエミッターを使用して非同期関数を作成するにはどうすればよいですか? しかし、イベントを発行するとすぐにハンドラーが実行されるため、不可能だと思います。