如何在不使用超时的情况下处理永远不会解决或拒绝的 Promise

问题描述 投票:0回答:1

我在 Node.js 中使用 TypeScript。我已将代码简化为以下内容:

async function runPromise(promise: Promise<unknown>) {
    await promise
    console.log('done')
}

void runPromise(new Promise(() => {
    console.log('in promise')
}))

当我运行此命令时,我得到以下输出,然后该过程以 0 退出状态结束:

in promise

因为 Promise 永远不会被解决或拒绝,所以它永远不会运行

console.log('done')
行。

我希望能够处理使用永远不会解析的 Promise 调用 runPromise 的情况。有没有办法让它抛出错误而不是默默退出?我想避免使用某种超时,因为我真的不知道应该花多长时间。


我本来应该问这个问题,但为什么 Node.js 在有未完成的承诺时关闭进程而不是无限期地挂起?我看到关于停止问题的参考。我假设 Node.js 会意识到未完成的承诺,但我发现这一定不是一个有效的假设。

此外,我已经更正了代码,因此 Promise 确实可以解决,但需要相当多的时间来调试,所以我只是试图改进我的 runPromise 函数,使其更加严格并因错误而失败,而不是默默地关闭。我希望将来能够避免此类错误。

javascript node.js es6-promise
1个回答
1
投票

正如评论中所讨论的:这是不可能的。

没有通用算法来确定

Promise
是否会稳定下来,出于同样的原因,也没有通用算法来确定程序 是否会停止

也就是说,要么只是使用超时,要么修复其来源

Promise

© www.soinside.com 2019 - 2024. All rights reserved.