Javascript 试图理解node.js REPL中的spawn

Javascript 试图理解node.js REPL中的spawn,javascript,node.js,Javascript,Node.js,我试图了解节点在涉及子进程和事件侦听器时是如何工作的。因此,如果我将下面的代码放在一个文件中,并在命令行中同时运行node,我可以看到pwd注销的输出,但是如果我在node中单独运行每一行,它不会显示。但是,如果我将后两行放在REPL中的一行上,并用分号分隔,它确实有效 const { spawn } = require('child_process'); const child = spawn('pwd', []); child.stdout.on('data', d => cons

我试图了解节点在涉及子进程和事件侦听器时是如何工作的。因此,如果我将下面的代码放在一个文件中,并在命令行中同时运行node,我可以看到
pwd
注销的输出,但是如果我在node中单独运行每一行,它不会显示。但是,如果我将后两行放在REPL中的一行上,并用分号分隔,它确实有效

const { spawn } = require('child_process');

const child = spawn('pwd', []);

child.stdout.on('data', d => console.log(d));
我认为这可能与使用
.on
生成和添加事件侦听器之间的时间过长有关,因此我尝试打印出一组数字以消磨时间,但这并没有什么区别


我想这与node/JS的编译和运行方式有关,但我不确定。简言之,为什么这在文件中有效,而在节点REPL中以交互方式运行时无效?文件不是也按顺序读取和执行吗?

我认为您的第一个假设是正确的。您可能需要使用。如果单独输入交互式REPL语句,则它们不会在同一个勾号中同步运行,因此,
data
事件有可能在两者之间触发。看看为什么在同步安装事件处理程序时不能发生这种情况(即使中间有一个繁忙的等待循环来消磨时间)。我认为您的第一个假设是正确的。您可能需要使用。如果单独输入交互式REPL语句,则它们不会在同一个勾号中同步运行,因此,
data
事件有可能在两者之间触发。看看为什么在同步安装事件处理程序时不能发生这种情况(即使在这两者之间有一个繁忙的等待循环来消磨时间)。