我如何在node.js调试器中检查promises?

时间:2015-07-27 22:30:46

标签: javascript node.js debugging

我在node.js中编写了一个应用程序。在主模块中,我使用cujojs'when module创建各种promise,并将它们推入一个数组,并使用when.all()。then()在满足时发送一条快乐的消息。当通过WebSocket连接接收某些消息时,将解决某些promise。当WebSocket消息按特定顺序到达时,我收到了快乐的消息。当消息以不同的顺序到达时,我没有收到快乐的消息。

所以我想看一下主模块中的promise和其他变量数组。简单地调用调试器会导致出现“No Frames”错误,因此我设置了一个虚拟的“heartbeat”函数,该函数每秒通过setInterval调用一次。然后,当我在heartbeat函数中设置断点并尝试查看promises数组时,调试器告诉我它是未定义的(应该是模块范围的变量!)。所以我在心跳功能中放了var pa = promises_array行。然后我尝试在repl中使用inspect method,如下所示:

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'

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

2 个答案:

答案 0 :(得分:1)

尝试使用Node Inspector

Node Inspector允许您调试Node.js代码,其方式与在Chrome Developer Tools中调试前端应用程序的方式非常相似,包括使用调试器语句和设置断点。您可以在执行时逐步完成您的承诺。

答案 1 :(得分:0)

While it is probably a great idea to use node-inspector, it's going to take me a while to get it set up on my platform, and I just discovered that the actual correct answer to my question is I should have typed the following into repl

for( p in pa ){ console.log( 'marker '+p+' is '+pa[p].inspect().state ); }

In other words, I'm an idiot for trying to invoke a method on the index p instead of the value of the array at index p :"(