首页 > 代码库 > node中的Readable - flowing/non-flowing mode
node中的Readable - flowing/non-flowing mode
大家都知道在node中Readable
Stream有两种模式: flowing mode
和non-flowing mode
。
对于flowing mode
的Readable
Stream, 我们是没法控制它何时去读数据读多少的,它会去尽快的去消耗data,并emit出来。
1 // in lib/_stream_readable.js2 if (state.flowing && state.length === 0 &&!state.sync) { 3 stream.emit(‘data‘, chunk);4 stream.read(0);
而non-flowing mode
的Readable Stream, 则不会主动的去读数据,需要自己显示的去调用read
方法才能得到数据。
1 // in lib/_stream_readable.js2 // update the buffer info.3 state.length += state.objectMode ? 1 : chunk.length; 4 if (addToFront) 5 state.buffer.unshift(chunk);6 else 7 state.buffer.push(chunk);
可以看到当有数据时,只是将数据放入buffer中,而不是直接emit。
所以如果想控制stream的读取顺序,大小和时间,应该使用non-flowing mode
,而当使用pipe有下游管道对数据进行处理时,这个时候数据的读取和处理应该交给下游管道处理,应该尽可能快的提供数据,所以要使用flowing mode
。而这也是node会在attach ‘data‘事件之后,自动转变为flowing mode
的原因,避免错误的使用或者忘记切换模式。
而pipe时则会注册data
事件,所以使用了pipe也会转换为flowing mode
。
1 var src = http://www.mamicode.com/this; 2 ...3 src.on(‘data‘, ondata);
link: http://villadora.me/2014/07/24/nodezhong-de-readable-flowingnon-flowing-mode/index.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。