pipe道相同的stream两次创build一个无限循环

我正在与Node.jsstream练习,我有以下代码的问题:

'use strict' let stream = require('stream'); let logger = new stream.Transform({ transform: function (chunk, encoding, next) { console.log(`Chunk: ${chunk}`); this.push(chunk); next(); } }) let liner = new stream.Transform({ transform: function (chunk, encoding, next) { chunk.toString().split('\r\n').forEach(e=>this.push(e)); next(); } }) process.stdin.pipe(logger).pipe(liner).pipe(logger); 

我希望这两个调用logging器是不同的logging器stream的实例,但他们似乎是相同的,他们进入一个无限循环,所以我应该怎么称呼他们,所以这段代码按预期工作。

非常感谢你。

这是相同的对象,所以预计无限循环:

 process.stdin.pipe(logger).pipe(liner).pipe(logger); // ^-----------------------| 

尝试使用2个不同的实例:

 'use strict' let stream = require('stream'); let logger = function () { return new stream.Transform({ transform: function (chunk, encoding, next) { console.log(`Chunk: ${chunk}`); this.push(chunk); next(); } }); } let liner = new stream.Transform({ transform: function (chunk, encoding, next) { chunk.toString().split('\r\n').forEach(e=> this.push(e)); next(); } }) process.stdin.pipe(logger()).pipe(liner).pipe(logger());