我是节点新手,尝试在节点中使用异步和事件行为优势。我曾经从节点理解,所有处理事件对象的东西,都将是异步执行。
然后我尝试了这个,考虑以下代码:
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 事件
- 输出我完成回调!
- 输出异步 n
为什么我完成回调!会在 Async n 之前输出吗?为什么这里不像快餐店的场景,像
工作事件被触发,去做你的事情,完成后回来,同时我将输出 Async n
这是我用来了解事件驱动行为和节点中的异步的。但现在我很困惑。我知道,javascript 适用于单线程。如何使用事件发射器编写异步函数?但我认为这是不可能的,因为当我发出一个事件时,它会立即执行处理程序。