Ошибка чтения NodeJs при чтении из потока - PullRequest
0 голосов
/ 07 марта 2019

Я хочу напечатать вывод каждую 1 секунду, но я получаю ошибку ниже.Я думал, что метод чтения вызывается синхронно, но, похоже, это не так.Может кто-нибудь объяснить, как выполняется метод чтения и почему я получаю эту ошибку?

const {Readable} = require('stream');

var out = new Readable({

    read(size){
        console.log('read');

        setTimeout(()=>{


        console.log(this.k);

        console.log('before push');

        this.push(String.fromCharCode(this.k++)+'\n');

        console.log('after push\n');
        if(this.k>65){
            this.push(null);
            console.log('null\n');
        }

    },1000);


    }

});
out.k = 65;
out.pipe(process.stdout);

И я получаю эту ошибку:

events.js:183
      throw er; // Unhandled 'error' event
      ^
    Error: stream.push() after EOF
        at readableAddChunk (_stream_readable.js:240:30)
        at Readable.push (_stream_readable.js:208:10)
        at Timeout.setTimeout [as _onTimeout] (C:\Users\x90540\Node\index.js:106:14)
        at ontimeout (timers.js:475:11)
        at tryOnTimeout (timers.js:310:5)
        at Timer.listOnTimeout (timers.js:270:5)

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Когда вы нажимаете null, вы закрываете поток, но не очищаете время ожидания, поэтому вы пытаетесь записать в закрытый поток.Попробуйте это так:

const { Readable } = require('stream');

var prevTimeout;
var out = new Readable({

    read(size) {

        prevTimeout = setTimeout(()=> {

            console.log(this.k);

            this.push(String.fromCharCode(this.k++)+'\n');

            if (this.k > 67) {

                this.push(null);

                clearTimeout(prevTimeout);
            }
        },
        500);
    }
});

out.k = 65;

out.pipe(process.stdout);

Подробнее о потоках: https://nodejs.org/api/stream.html#stream_readable_streams

0 голосов
/ 07 марта 2019

Для тех, кто придет, чтобы прочитать это позже:

Это поведение не воспроизводится, если вы используете обновленную версию Node. Подробное обсуждение этого можно найти здесь:

github.com / nodejs / node / Issues / 3203 # IssueComment-355137794

...