为了账号安全,请及时绑定邮箱和手机立即绑定

一个nodejs stream诡异的行为, 猜测和事件循环有关系, 求解释?

一个nodejs stream诡异的行为, 猜测和事件循环有关系, 求解释?

不负相思意 2019-05-08 17:26:04
当前目录下准备一个test.txt,写入一些东西,比如>It'sfortestIt'sfortestIt'sfortestIt'sfortest{console.log('end')})//setTimeout(()=>{//from.pipe(to)//thiswon'twork,iftime>=3//},3)//setTimeout(()=>{//from.pipe(to)//thiswillwork,iftime
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

通过I/O读取字符串到缓冲区
timers阶段没有callback执行,写入WriteStream,timers阶段检测到callback,执行callback,然鹅ReadStream没数据,pipe没有效果。
timers阶段检测到callback,执行callback,ReadStream数据还在,pipe有效果。
用process.stdout测试
constfs=require('fs')
constfrom=fs.createReadStream('test.txt')
from.pipe(process.stdout,{
end:false
})
from.on('end',()=>{
console.log('end')
})
setTimeout(()=>{
console.log('timercallback')
from.pipe(process.stdout)//thiswon'twork,iftime>=3
},3)
//setTimeout(()=>{
//console.log('timercallback')
//from.pipe(process.stdout)//thiswillwork,iftime<3
//},2)
                            
查看完整回答
反对 回复 2019-05-08
?
智慧大石

TA贡献1946条经验 获得超3个赞

默认情况下,在源流发出时stream.end()在目标Writable流上调用,以便目标不再可写。要禁用此默认行为,可以将该选项作为传递,从而使目标流保持打开状态:
reader.pipe(writer,{end:false});
上面说的很清楚了,设置false是保持打开状态,不是你理解的可以一直编辑,也是有时间限制的由于Js是异步处理,所有程序同步执行,写入和settimeout也一样,所以当你设置延迟时长高的时候,是没办法注入进去的。谢谢
                            
查看完整回答
反对 回复 2019-05-08
  • 2 回答
  • 0 关注
  • 380 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信