【发布时间】:2021-12-26 13:36:04
【问题描述】:
在我正在进行的项目中,我们有时会因为错误的承诺永远不会解决而等待永远不会解决。
这真的很难找到哪个 await 导致代码停止运行并找到 node.js 卡在哪里。
这是问题的代码说明。假设“getRandomlyStuckedPromise”是来自外部库的承诺:
getRandomlyStuckedPromise = () => new Promise((resolve) => {
if (Math.random() > 0.9) return;
resolve(); // never get called some times
});
await getBadPromise();
await getBadPromise();
await getBadPromise();
await getBadPromise();
await getBadPromise();
await getBadPromise(); // Node.js stuck at one line ... how to know which one ?
await getBadPromise();
await getBadPromise();
如果你已经遇到过这类问题,你知道 node.js 中的一些工具或任何技术可以找到等待 node.js 卡住的地方吗?
【问题讨论】:
-
将
return移到resolve()下。 return 存在当前函数,因此,是的,永远不会调用 resolve。 TBH 你根本不需要退货 -
这只是为了说明pb ...请阅读以上内容;)
-
那么实际的问题是什么?为什么你的承诺没有兑现?根据您提供的信息,我们无法确定这一点。它实际上可能是 1,000 种东西
-
好吧,我最后的问题可能没有很好地表述......我会重写它。我不想知道承诺中的问题(因为它可能来自库或其他任何东西)。我想知道哪个“等待”node.js 卡住了。我将编辑我的问题。
-
@Poyoman 后来我突然想到:如果这都是Puppeteer,你不能用
setDefaultNavigationTimeoutandsetDefaultTimeout给你更好的错误信息吗?或者为任何异常传递一个timeout参数?
标签: node.js debugging async-await promise