promiseizedExpressJs函数中引发错误

Thrown error in promisified ExpressJs function

本文关键字:错误 函数 promiseizedExpressJs      更新时间:2023-09-26

我不太清楚如何处理promise中的错误(而且我对promise还很陌生,所以我可能没有充分利用它们)。

我有以下代码:

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。我是不是错过了什么?

这与promise无关,它只是一个基本的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(....)