作為前端,我們常常會(huì)和 Stream 有著頻繁的接觸。比如使用 gulp 對項(xiàng)目進(jìn)行構(gòu)建的時(shí)候,我們會(huì)使用 gulp.src 接口將匹配到的文件轉(zhuǎn)為 stream(流)的形式,再通過 .pipe() 接口對其進(jìn)行鏈?zhǔn)郊庸ぬ幚恚?/p>
或者比如我們通過 http 模塊創(chuàng)建一個(gè) HTTP 服務(wù):
const http = require('http'); http.createServer( (req, res) => { //...}).listen(3000);
此處的 req 和 res 也屬于 Stream 的消費(fèi)接口(前者為 Readable Stream,后者為 Writable Stream)。
事實(shí)上像上述的 req/res,或者 process.stdout 等接口都屬于 Stream 的實(shí)例,因此較少存在情況,是需要我們手動(dòng)引入 Stream 模塊的,例如:
//demo1.js'use strict'; const Readable = require('stream').Readable; const rs = Readable(); const s = 'VaJoy'; const l = s.length; let i = 0; rs._read = ()=>{ if(i == l){ rs.push(' is my name'); return rs.push(null) } rs.push(s[i++]) }; rs.pipe(process.stdout);
如果不太能讀懂上述代碼,或者對 Stream 的概念感到模糊,那么可以放輕松,因?yàn)楸疚臅?huì)進(jìn)一步地對 Stream 進(jìn)行剖析,并且談?wù)勚苯邮褂盟赡軙?huì)存在的一些問題(這也是為何 gulp 要使用 through2 的原因)。
另外本文的示例均可在我的