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

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

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

慕仙森 2019-02-06 21:07:47
一个nodejs stream诡异的行为, 猜测和事件循环有关系, 求解释?
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

通过I/O读取字符串到缓冲区

  1. timers阶段没有callback执行,写入WriteStreamtimers阶段检测到callback,执行callback,然鹅ReadStream没数据,pipe没有效果。

  2. timers阶段检测到callback,执行callbackReadStream数据还在,pipe有效果。

process.stdout测试

const fs = require('fs')

const from = fs.createReadStream('test.txt')


from.pipe(process.stdout, {

    end: false

})


from.on('end', () => {

    console.log('end')

})


setTimeout(() => {

    console.log('timer callback')

    from.pipe(process.stdout) //this won't work, if time >= 3

}, 3)



// setTimeout(() => {

//     console.log('timer callback')

//     from.pipe(process.stdout) //this will work, if time < 3

// }, 2)


查看完整回答
反对 回复 2019-03-13
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

默认情况下, 在源流发出时stream.end()在目标Writable流上调用,以便目标不再可写。要禁用此默认行为, 可以将该选项作为传递,从而使目标流保持打开状态:

reader.pipe(writer, { end: false });

上面说的很清楚了,设置false是保持打开状态,不是你理解的可以一直编辑,也是有时间限制的
由于Js是异步处理,所有程序同步执行,写入和settimeout也一样,所以当你设置延迟时长高的时候,是没办法注入进去的。
谢谢


查看完整回答
反对 回复 2019-03-13
  • 2 回答
  • 0 关注
  • 627 浏览

添加回答

举报

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