在 IntelliJ 或 WebStorm 中使用生成器调试 JS 的更好方法
Better way to debug JS with generators in IntelliJ or WebStorm
我正在使用 Koa 框架在 Node JS 中开发 Web 应用程序。
所有的流程控制都是用生成器完成的,而不是回调。代码看起来是顺序的,但实际流程并非如此。不管怎样,它看起来比回调地狱要干净得多。
下面是一个用koa写的controller函数的简单例子:
function *findUserById(userId)
{
var user = yield getUserOrError404(userId);
yield loadAdditionalData(user);
yield data.users.save(user);
return user;
}
但是有一个困难:在我的 IDE (IntelliJ IDEA) 中使用 yield
单步执行代码不是很好。一旦执行与 yield
语句一致,如果我只是 "step over",则执行流程会上升到堆栈到 koa 代码(这实际上不是 IDE 的错,因为它只是遵循生成器、yield 语句和 Node 事件循环的实际执行流程。
目前我必须为我希望调试器暂停的下一条语句设置断点,通常是下一行,然后单击 "Resume program" 按钮。
当有超过 2-3 个 yield 语句时,它会变得乏味。
是否有更好的方法(技巧、插件等)来单步执行大量生成器的 JS 代码,允许单步执行 yield 语句,就好像它是 "normal" 顺序语句一样?
听起来像是 Run To Cursor
命令的工作 - 它像轻量级断点一样有效地运行,在执行到光标当前所在的行后被删除。
请参阅 this gist 以获取可用于此目的的按钮的屏幕截图,以及我用来检查其是否有效的测试工具文件(有效;至少在 PhpStorm 中如此,所以我期望 WebStorm就 JS 而言,功能相同)。
编辑:它在 IntelliJ 中也能完美运行。除了屏幕截图中显示的按钮外,您还可以通过右键单击该行然后单击上下文菜单中的 "Run to cursor" 来触发它。或者 [alt]+[F9] 键盘快捷键。
我正在使用 Koa 框架在 Node JS 中开发 Web 应用程序。
所有的流程控制都是用生成器完成的,而不是回调。代码看起来是顺序的,但实际流程并非如此。不管怎样,它看起来比回调地狱要干净得多。
下面是一个用koa写的controller函数的简单例子:
function *findUserById(userId)
{
var user = yield getUserOrError404(userId);
yield loadAdditionalData(user);
yield data.users.save(user);
return user;
}
但是有一个困难:在我的 IDE (IntelliJ IDEA) 中使用 yield
单步执行代码不是很好。一旦执行与 yield
语句一致,如果我只是 "step over",则执行流程会上升到堆栈到 koa 代码(这实际上不是 IDE 的错,因为它只是遵循生成器、yield 语句和 Node 事件循环的实际执行流程。
目前我必须为我希望调试器暂停的下一条语句设置断点,通常是下一行,然后单击 "Resume program" 按钮。
当有超过 2-3 个 yield 语句时,它会变得乏味。
是否有更好的方法(技巧、插件等)来单步执行大量生成器的 JS 代码,允许单步执行 yield 语句,就好像它是 "normal" 顺序语句一样?
听起来像是 Run To Cursor
命令的工作 - 它像轻量级断点一样有效地运行,在执行到光标当前所在的行后被删除。
请参阅 this gist 以获取可用于此目的的按钮的屏幕截图,以及我用来检查其是否有效的测试工具文件(有效;至少在 PhpStorm 中如此,所以我期望 WebStorm就 JS 而言,功能相同)。
编辑:它在 IntelliJ 中也能完美运行。除了屏幕截图中显示的按钮外,您还可以通过右键单击该行然后单击上下文菜单中的 "Run to cursor" 来触发它。或者 [alt]+[F9] 键盘快捷键。