作為前端,我們常常會和 Stream 有著頻繁的接觸。比如使用 gulp 對項目進行構建的時候,我們會使用 gulp.src 接口將匹配到的文件轉為 stream(流)的形式,再通過 .pipe() 接口對其進行鏈式加工處理;

或者比如我們通過 http 模塊創(chuàng)建一個 HTTP 服務:

const http = require('http');
http.createServer( (req, res) => {  //...}).listen(3000);

此處的 req 和 res 也屬于 Stream 的消費接口(前者為 Readable Stream,后者為 Writable Stream)。

事實上像上述的 req/res,或者 process.stdout 等接口都屬于 Stream 的實例,因此較少存在情況,是需要我們手動引入 Stream 模塊的,例如:

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

//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培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

如果不太能讀懂上述代碼,或者對 Stream 的概念感到模糊,那么可以放輕松,因為本文會進一步地對 Stream 進行剖析,并且談談直接使用它可能會存在的一些問題(這也是為何 gulp 要使用 through2 的原因)。

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

網(wǎng)友評論