作為前端,我們常常會(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 模塊的,例如:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

//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);

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

如果不太能讀懂上述代碼,或者對 Stream 的概念感到模糊,那么可以放輕松,因?yàn)楸疚臅?huì)進(jìn)一步地對 Stream 進(jìn)行剖析,并且談?wù)勚苯邮褂盟赡軙?huì)存在的一些問題(這也是為何 gulp 要使用 through2 的原因)。

另外本文的示例均可在我的