如何在node.js调试器中检查承诺?

how can I inspect promises in the node.js debugger?

本文关键字:检查 承诺 调试器 js node      更新时间:2023-09-26

我用node.js写了一个应用程序。在主模块中,我使用cujojs的when模块创建了各种承诺,并将它们推入数组中,并使用when.all().then()在它们全部实现时发送快乐消息。当通过WebSocket连接接收某些消息时,一些承诺被解决。当WebSocket消息以一定的顺序到达时,我得到快乐的消息。当消息以不同的顺序到达时,我没有收到快乐的消息。

所以我想看看主模块中的承诺数组和其他变量。简单地调用调试器会导致"No Frames"错误,因此我设置了一个虚拟的"心跳"函数,通过setInterval每秒调用一次。然后,当我在heartbeat函数中设置断点并试图查看承诺数组时,调试器告诉我它是未定义的(应该是一个模块范围的变量!)。我在心跳函数中放了一条var pa = promises_array线。然后我试着在repl中使用when的检查方法,如下所示:

debug> repl
Press Ctrl + C to leave debug repl
> for( p in pa ){ console.log( p.inspect().state }

上面写着TypeError: Object 0 has no method 'inspect'

所以我不知道发生了什么。当我在模块中设置断点时,为什么我看不到模块中的变量?

尝试使用节点检查器。

Node Inspector允许你调试Node.js代码,就像你在Chrome Developer Tools中调试前端应用程序一样,包括使用调试器语句和设置断点。你可以一步一步地履行你的承诺。

虽然使用node-inspector可能是一个好主意,但我要花一些时间才能在我的平台上设置它,并且我刚刚发现我的问题的实际正确答案是我应该在repl

中键入以下内容
for( p in pa ){ console.log( 'marker '+p+' is '+pa[p].inspect().state ); }

换句话说,我是一个白痴,试图调用索引p上的方法,而不是索引p上的数组的值:"(