在 promisified ExpressJs 函数中抛出错误

Thrown error in promisified ExpressJs function

我不太确定我理解错误是如何在 promises 中处理的(而且我对 promises 还很陌生,所以我可能不会充分利用它们)。

我有以下代码:

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

这与 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(....)