gpt4 book ai didi

javascript - 在 promisified ExpressJs 函数中抛出错误

转载 作者:搜寻专家 更新时间:2023-11-01 00:32:02 24 4
gpt4 key购买 nike

我不太确定我理解错误是如何在 promise 中处理的(而且我对 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(....)

关于javascript - 在 promisified ExpressJs 函数中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371561/

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