我有以下代码:
...
fs.readdir('mydir', function(error, files)
{
for(var i = 0; i < files.length; i++)
{
console.log(files[i]);
}
});
...
当我尝试调试回调函数中的代码时,调试器只是跳过回调并且只在(在省略号中)之前和之后执行代码。是否需要设置一个特殊标志才能调试异步代码?
我已经验证回调是否正在运行,因为我正在输出文件名。
答案 0 :(得分:1)
在回调中设置断点并运行到该断点。异步回调不会按顺序执行(它们将来会执行一些不确定的时间),因此您无法逐行执行这些回调并进入回调。
要刷新你的记忆,如果你有这个代码:
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执行的其余部分完成后稍后被调用了一些不确定的时间。从上到下没有顺序执行包括回调,因此调试器不会逐步执行&#34;在逐行执行时自行回调。
因此,您告诉调试器,只要执行通过在那里设置断点执行回调,您就会停止它。然后,运行代码,当执行到达回调时,断点将进入调试器,然后逐步执行该回调调用。