作为前端,我们常常会和 Stream 有着频繁的接触。比如使用 gulp 对项目进行构建的时候,我们会使用 gulp.src 接口将匹配到的文件转为 stream(流)的形式,再通过 .pipe() 接口对其进行链式加工处理;

或者比如我们通过 http 模块创建一个 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培训,苹果开发培训,移动开发培训

//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培训,苹果开发培训,移动开发培训

如果不太能读懂上述代码,或者对 Stream 的概念感到模糊,那么可以放轻松,因为本文会进一步地对 Stream 进行剖析,并且谈谈直接使用它可能会存在的一些问题(这也是为何 gulp 要使用 through2 的原因)

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