【问题标题】:How to get "initiator" debugging information for promises?如何获取承诺的“发起者”调试信息?
【发布时间】:2017-10-10 23:47:54
【问题描述】:

在使用 Visual Studio Code 之类的工具在 Node.JS 中调试 then 承诺回调时,调用堆栈似乎几乎是多余的。它没有提供从逻辑角度实际调用我的代码的函数,而是提供从字面角度调用我的代码的函数; Bluebird 库(或者可能是 Q 库)函数。我真正想看到的是之前执行的promise函数,或者promise链的“发起者”。从逻辑的角度来看,这是我关心的程序流程。有没有办法在调试过程中获取这些信息?

【问题讨论】:

  • 您意识到,您要的不是实际的调用堆栈。根据 Promise 规范,当调用 .then() 处理程序时,调用堆栈会清除所有代码 - 这就是异步处理程序所发生的情况。也就是说,我了解您希望看到的内容(异步流堆栈或类似的东西),但我不知道有任何工具可以提供。 Bluebird promise library 有一种方法可以为您提供可能与您的问题相关的长堆栈跟踪。
  • 好主意。我发布了一个答案。
  • 使用 Google Chrome DevTools 进行调试时,您已经支持 async 调用堆栈。它可能是堆栈中存在一些库(如Bluebird),您可以使用blackbox feature 跳过这些库。在 VSCode 中有一个类似的功能叫做 skipFiles 你必须在 launch.json 文件中设置。

标签: javascript node.js debugging promise visual-studio-code


【解决方案1】:

您意识到,您要的不是实际的调用堆栈。根据 Promise 规范,当调用 .then() 处理程序时,调用堆栈会清除所有代码 - 这就是异步处理程序所发生的情况。

也就是说,我了解您希望看到的内容(异步流堆栈或类似的东西),但我不知道有任何工具可以提供这种功能。 Bluebird promise library 有一种方法可以为您提供可能与您的问题相关的长堆栈跟踪

【讨论】:

    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多