我有以下代码:
...
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/