蓝鸟未处理发出NodeJS的错误

即时通讯使用蓝鸟v2.8.2承诺,但即时获取未处理的错误和捕获代码不处理。

编辑来响应:

var Promise = require('bluebird') util = require('util') EventEmitter = require('events').EventEmitter; var Module = function() { EventEmitter.call(this); }; util.inherits(Module, EventEmitter); var getData = function() { return Promise.reject(new Error('test')); }; Module.prototype.getCustomer = function() { var self = this; setTimeout(function() { getData().then(function() {}) .catch(function(error) { self.emit('error', error); // This causes problem!! }); }, 1000); } 

解决: Esailija的最后评论

它处理得很好,但很可能你的代码在catch处理程序中有一个错误,并抛出一个错误。 我build议你仔细阅读打印的未处理的错误,看看它是什么。

等效的同步代码将具有相同的行为:

  try { throw new Error("test"); } catch (e) { causesUnhandledReferenceError; } 

如果你想捕捉这个错误(你当然不会,只是为了练习),你需要另一个尝试:

 try { throw new Error("test"); } catch (e) { try { doesntCauseUnhandledReferenceError; } catch (e) { // logs reference error console.log(e) } } 

与承诺类似:

 getData().then(function() { }).catch(function(e) { doesntCauseUnhandledReferenceError; }).catch(function(e) { // logs reference error console.log(e) });