Я пытаюсь понять, как работает нативная реализация потоков. Вот код:Node.JS - нужна помощь для понимания родных потоков
const Stream = require('stream');
// define a custom class to read my data into the stream
class SourceWrapper extends Stream.Readable {
constructor(opt, content) {
super(opt);
this.content = content;
this.len = content.length;
this.index = 0;
}
_read() {
let i = this.index++;
if (i >= this.len)
this.push(null);
else {
this.push(this.content[i]);
}
}
}
// generate some data
const arr = (new Array(10000000)).fill(1);
// declare the streams
const firstStream = new SourceWrapper({objectMode: true}, arr);
const transform = (x, enc, next) => next(undefined, x * Math.random(x, 10));
const firstMapStream = new Stream.Transform({objectMode: true});
firstMapStream._transform = transform;
const secondMapStream = new Stream.Transform({objectMode: true});
secondMapStream._transform = transform;
// create a promise to measure execution time
const start = new Date();
new Promise((resolve, reject) => {
firstStream
.pipe(firstMapStream)
.pipe(secondMapStream)
.on('finish',() => resolve(new Date()));
})
.then((end) => console.log('execTime', end - start));
Проблема заключается в том, что она работает на небольших наборах данных (т.е. [1,2,3,4]
), но, кажется, прекращается вскоре после запуска на большом наборе.
Что мне не хватает? Это как-то связано с objectMode
?
Цените любую помощь.
Спасибо. Думаю, теперь я понимаю. – nainy