我正在使用Bluebird v2.8.2 Promises,但我没有处理未处理的错误和catch中的代码。
已编辑回复:
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的最新评论
答案 0 :(得分:2)
处理得很好,但很可能你的catch处理程序中的代码有一个错误并引发错误。我建议你仔细阅读印刷的未处理错误,看看它是什么。
等效同步代码的行为方式相同:
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)
});