javascript - 异步回调内部调试

标签 javascript node.js asynchronous

我有以下代码:

...
fs.readdir('mydir', function(error, files)
{
  for(var i = 0; i < files.length; i++)
  {
    console.log(files[i]);
  }
});
...

当我尝试调试回调函数内的代码时,调试器只是跳过回调并仅执行之前和之后的代码(在省略号中)。是否需要设置一个特殊标志才能调试异步代码?

我已验证回调是否运行,因为我正在获取文件名的输出。

最佳答案

您在回调中设置一个断点并运行到该断点。异步回调不会按顺序执行(它们会在未来某个不确定的时间执行),因此您无法逐行单步执行它们并进入回调。

<小时/>

为了刷新您的内存,如果您有以下代码:

console.log("a");
fs.readdir('mydir', function(error, files) {
  for(var i = 0; i < files.length; i++)  {
    console.log("file #: " + i);
  }
});
console.log("b");
console.log("c");

您将在日志中看到的内容是:

a
b
c
file #: 1
file #: 2
file #: 3
file #: 4

因为异步回调会在 JS 线程执行的其余部分完成后的某个不确定的时间被调用。没有包含回调的从上到下的顺序执行,因此当您逐行执行时,调试器不会自行“单步执行”回调。

因此,您可以通过在回调处设置断点来告诉调试器您希望它在执行到达回调时停止。然后,您运行代码,当执行到回调时,您的断点将中断到调试器,然后您单步执行回调的调用。

关于javascript - 异步回调内部调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128313/

相关文章:

javascript - 当我从 fetch 函数发送数据时,为什么我的函数返回 false?

javascript - 通过从下拉列表中选择,启用另一个下拉列表

javascript - 是否可以将 Node localhost 暴露给我的主机?

asynchronous - 控制衍生 future 的数量以产生背压

c# - 在 Singleton.Instance 后面调用异步方法

javascript - 如何多次解析 Q 延迟对象,即逐步解析?

javascript - 在 Socket.io 中设置 XMLHttpRequest 的 withCredentials 属性

node.js - NodeJS中的uv和v8是什么

javascript - 即使我设置了 express.static() 并具有正确的路径,我的第一个应用程序也不提供 css

javascript - 使用 ALASQL (AngularJS) 格式化导出的 Excel