我正在使用node.js来spawn子进程并使用child.stdout.on('data')
挂钩消耗其输出。
child.stdout
本身就是一个流,在streams page上,我注意到一个很大的警告,告诉我如果在数据事件到来时没有注册处理程序,那么数据就会丢弃在地板上。
我的子进程的生成和我的stdout处理程序的注册之间有一个短暂的时刻。 这里是否存在竞争条件?我不希望我的第一次阅读失败。
猜测父和子之间的管道会缓冲,但节点是否保证它是合理的?
答案 0 :(得分:2)
你必须在同一个转(一系列串行语句)中调用child.stdout.on('data', [...])
后者作为child_process.spawn([...])
调用,以确保在IO操作时监听器在那里接下来处理。或者您可以暂停流child.stdout.pause()
(在同一回合中)并在添加侦听器之后在后一轮中恢复它,如果有必要在后一轮安装侦听器。