2016-02-13 2 views
1

Я практикуя с Node.js потоками и у меня возникли проблемы со следующим кодом:Piping тот же поток дважды создает бесконечный цикл

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

Я ожидал, что два вызова Logger быть Diferent экземпляров потока журналов, но они кажутся одинаковыми, и они попадают в бесконечный цикл, поэтому как мне их называть, поэтому этот код работает по назначению.

спасибо.

ответ

1

Это тот же объект, так что бесконечный цикл, как ожидается:

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

Попробуйте использовать 2 Differents экземпляров:

'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()); 
Смежные вопросы