【问题标题】:Finding source of unhandled promise rejection: TypeError: Chaining cycle detected for promise查找未处理的承诺拒绝的来源:TypeError:检测到承诺的链接循环
【发布时间】:2020-04-04 19:07:57
【问题描述】:

我正在尝试从 Node.js 中的 Promise 中找到未处理拒绝的来源

我尝试使用--async-stack-traces 选项升级到 Node 版本 12,并使用以下方法监听它们:

process.on("unhandledRejection",( reason, promise ) => {
  console.log(reason);
  console.log(promise);
});

但我仍然没有看到任何有用的堆栈跟踪来帮助我找到罪魁祸首!

UnhandledPromiseRejectionWarning: TypeError: Chaining cycle detected for promise #<Promise>
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:89675) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 11)

运行节点 v10.10.0

【问题讨论】:

  • 是否有多个承诺?
  • 你的代码中的错误是一个循环链接,就像你使用const cyclic = Promise.resolve().then(()=&gt;cyclic);一样,所以不要搜索未处理的承诺拒绝,这个在节点的内部代码。
  • 一些提出问题的代码会有所帮助。
  • 运行 npm i bluebird 并在代码中添加 const Promise = require('bluebird') 可能会给您更详细的错误消息
  • 尝试使用--trace-warnings 运行节点,未处理的拒绝伴随着您可以追踪的警告

标签: javascript node.js promise v8


【解决方案1】:

为这段代码找到一些好的堆栈跟踪 const cyclic = Promise.resolve().then(() =&gt; cyclic); 我将这段代码放入文件prromise_cycle.js 并使用inspector 运行调试它。

我在 Chrome DevTools 上调试它并启用标志 Pause on caught exceptions,然后我可以看到带有我的文件的整个堆栈跟踪

【讨论】:

    【解决方案2】:

    如果您错过了有用的堆栈跟踪,您可以通过在处理程序中重新抛出错误来让节点创建一个新的,如下所示:

    process.on('unhandledRejection', (reason, p) => { throw reason });
    

    这样,你应该能够追查到罪魁祸首。

    【讨论】:

    • 我只是在我这边再试一次,它确实有效。
    • @d-_-b 你能在你身边测试这个吗?
    • 嗨@Gomino,是的,不幸的是它在我的场景中不起作用,但我感谢您在这里的帮助!
    【解决方案3】:

    感谢所有建议。我再次尝试升级到最新的 Node 12.14.1,终于能够让它显示堆栈跟踪:

    我使用node --async-stack-traces myScript.js 与:

    process.on('unhandledRejection', (reason, p) => {
      console.log(reason);
    });
    

    它跟踪了错误。

    【讨论】:

    • 即使没有事件处理程序,节点 12 是否也不会记录未处理的拒绝原因?
    • 你还没试过我提供的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 2023-03-17
    • 2018-04-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多