gpt4 book ai didi

javascript - Bluebird 未处理的错误与 emit NodeJS

转载 作者:行者123 更新时间:2023-11-30 17:05:29 25 4
gpt4 key购买 nike

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

最佳答案

它处理得很好,但是您的 catch 处理程序中的代码很可能存在错误并引发了错误。我建议您更仔细地阅读打印的未处理错误,看看它是什么。

等效的同步代码将以相同的方式运行:

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

如果你想捕获那个错误(你当然不会,只是为了练习)你需要另一个 try catch:

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

与 promise 类似:

getData().then(function() {

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

关于javascript - Bluebird 未处理的错误与 emit NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28117851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com