我不太清楚我是否理解承诺中的错误是如何处理的(我对承诺很新,所以我可能不会充分利用它们。)
我有以下代码:
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!");
});
由于我不太了解的原因,即使app.listenAsync抛出错误,例如EADDRINUSE,我的catch()
也永远不会被调用。为什么呢?
修改: 我刚注意到,如果我做了
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
。我错过了什么吗?
答案 0 :(得分:4)
这与promises无关,它只是基本的javascript:你正在调用listen就好像它是一个函数,但它是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(....)