MyThing.prototype.foo = function foo() {
// 这个 error 会被异步触发
var er = doFirstThing();
if (er) {
// 在触发时,需要创建一个新的保留现场调用堆栈信息的error
setImmediate(emitError, this, new Error('Bad stuff'));
return;
}
// 触发error,马上处理(同步)
var er = doSecondThing();
if (er) {
this.emit('error', 'More bad stuff');
return;
}
}
审时度势。当error被触发时,是有可能被立即处理的。或者,它可能是一些琐碎的,可以很容易处理,或在以后再处理的异常。此外通过一个构造函数,传递Error也不是一个好主意,因为构造出来的对象实例很有可能是不完整的。刚才直接抛出Error的情况是个例外。
结束语
这篇文章比较浅显地探讨了有关事件循环的内部运作机制和技术细节。都是经过深思熟虑的。另一篇文章会讨论事件循环与系统内核的交互,并展现NodeJS异步运行的魔力。
您可能感兴趣的文章: