【发布时间】:2016-02-03 19:16:57
【问题描述】:
我的代码看起来像
var EventEmitter = require('events');
class MyClass extends EventEmitter{
doSomething(){
this.emit('error', new Error('this is why') );
}
}
function doSomethingAsync(){
return new Promise( (resolve,reject) =>{
new MyClass().doSomething();
resolve();
});
}
process.on('unhandledRejection', function(reason){
console.error('unhandled rejection', reason, reason.stack);
});
setTimeout( doSomethingAsync,1);
如果我没有为myClass.on('error', ()=>{ ... }) 分配error 事件处理程序,则在引发error 事件并且doSomething 流被中断时会触发unhandledRejection 处理程序(我看不到@987654328 @ 打印)
如果我添加一个处理程序,一切正常(我确实看到了after 打印)。
我怎样才能避免这种情况?为什么“错误”事件会导致 Promise 被拒绝?
有时我不在乎事件发射器是否抛出错误事件。但我会一直在意承诺是否失败。 这是错的吗?我应该对他们一视同仁吗?
使用 nodejs 4.2.1
编辑
好的,所以我了解到节点以一种特殊的方式处理未处理的“错误”,如果未处理它会抛出异常。
https://strongloop.com/strongblog/robust-node-applications-error-handling/
有办法解决吗?我不明白为什么在 nodejs 中选择这种实现是正确的。
不应该有一个像unhandledErrorEvent 这样的全局处理程序吗?就像他们添加到unhandledRejection一样?
【问题讨论】:
-
你能给我们提供一个完整的例子来重现这个问题吗?
-
我会试试的。给我一秒钟。
-
@Ginden done.. 查看更新的问题代码 sn-p
标签: node.js es6-promise