蓝鸟未处理发出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) });