对于一个简单的问题,我无法找到简明的答案。希望这就是它。
我只想这样做:
let myReadableStream = ...some readable stream...;
let myFileStream = ...some writable file stream...;
myReadableStream.pipe(process.stdout).pipe(myFileStream);
这不起作用,因为可写流不能通过管道输送。
这种作品:
let myReadableStream = ...some readable stream...;
let myFileStream = ...some writable file stream...;
myReadableStream.pipe(process.stdout);
myReadableStream.pipe(myFileStream);
但如果可读管道在达到第二个myReadableStream.pipe(myFileStream)
之前快速填满数据,那么这会导致问题吗?
用管道做这个规范的方法是什么?
答案 0 :(得分:1)
据我了解node.js流,他们在调用pipe()
函数时没有立即开始流动,工作被推迟到你将控制返回到event loop。所以不,两个pipe()
电话之间不会发生任何事情。
我知道这对于来自基于多个应用程序线程的环境的人(像我一样)似乎是违反直觉的。但多线程不并发的JavaScript模型。异步JavaScript执行基于一个更易于管理的EventLoop模型,其中异步回调处理仅发生其他应用程序代码空闲。最重要的是不需要锁,有时很难在线程执行模型中找到锁。