Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 node.js生成一个子进程并使用child.stdout.on('data')钩子使用它的输出。
child.stdout.on('data')
child.stdout它本身就是一个流,在流页面上,我注意到一个胖警告通知我,如果在数据事件到达时没有注册处理程序,那么数据就会掉到地板上。
child.stdout
在我的子进程的产生和我的标准输出处理程序的注册之间有一个短暂的时刻。 这里有比赛条件吗? 我不希望我的第一次阅读丢失。
可以合理地猜测父子之间的管道会缓冲,但节点是否保证它?
您必须在调用child.stdout.on('data', [...])的同一轮(一系列串行语句)中调用后者,child_process.spawn([...])以确保在下一次处理 IO 操作时侦听器在那里。或者,如果需要在后一回合安装侦听器,您可以暂停流child.stdout.pause()(在同一回合中)并在添加侦听器后在后一回合恢复流。
child.stdout.on('data', [...])
child_process.spawn([...])
child.stdout.pause()