promisified ExpressJs函数中的抛出错误
问题描述:
我不太确定我理解错误是如何在promise中处理的(而且我对承诺相当陌生,所以我可能不会使用它们来充分发挥它们的潜力)。promisified ExpressJs函数中的抛出错误
我有以下代码:
app.listenAsync = Promise.promisify(app.listen);
app.listenAsync(config.port)
.then(function done() {
console.log("We're listening!");
})
.catch(function (err) {
console.log("Abort abort!");
});
对于原因,我不太明白,我catch()
不会被调用,即使app.listenAsync抛出一个错误,EADDRINUSE例如。为什么?
编辑: 我只注意到,如果我做
var listenAsync = Promise.promisify(app.listen);
listenAsync(config.port)
.then(function done() {
console.log("We're listening!");
})
.catch(function (err) {
console.log("Abort abort!");
});
给出几乎是正确的行为。 listenAsync引发错误(这次在catch
声明中发现)Possibly unhandled TypeError: listener must be a function
。我错过了什么吗?
答
这与承诺没有任何关系,它只是基本的javascript:你打电话来听,就好像它是一个函数,但它是一种方法app
。
一些选项:
Promise.promisifyAll(app);
// Note how it's called as a method on app
app.listenAsync(...).then(....)
或者
// Bind the function as a method of app
var appListenAsync = Promise.promisify(app.listen, app);
appListenAsync(...).then(....)
您是否尝试过使用'Promise'对象USAL,像 '新的承诺(函数(reslve,拒绝){ 尝试{应用。 listen(config.port); resolve();} catch(){reject();} })。然后(...)。catch(...)'? – 2015-02-06 17:43:59
请给出完整的代码,以防万一您使用的是蓝鸟版本吗? – Esailija 2015-02-10 00:34:35
蓝鸟2.9.9 完整代码:http://pastie.org/9960184 我对此延误表示歉意。 – Nepoxx 2015-02-18 19:03:44