蓝鸟未处理错误发出NodeJS

时间:2015-01-23 20:04:04

标签: javascript node.js promise bluebird

我正在使用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的最新评论

1 个答案:

答案 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)
});