I am new in node and try to use async and event behavior advantages in node. I used to understand from node, everything that handle with Event object, it gonna be async execution.
Then i had try this, consider following code:
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!");
});
This is async execution? In my opinion no! Why, because i had read this sentence many:
An event is fired, so go and do something and then when you have finished it, come back and tell me, but in meanwhile i will do something else.
Like a fast food restaurant scenario. But the code above, when the event work gonna fired, following sequence will happen:
- go into the callback
- let through the loop
- output I do my work n
- fired the done event
- output I am done callback!
- output Async n
why I am done callback! gonna output before Async n? Why is here not like fast food restaurant scenario, like
the work event is fired, go and do you stuff and come back when you done, in meanwhile i will output Async n
This is i used to understand about event driven behavior and async in node. But now i am very confused. I know, javascript works on single thread. How can i write an async function with event emitter? But i think is not possible, because when i emit an event, it will immediately execute the handler.