Pumpify по-разному ведет себя в Node 8 и Node 10 - PullRequest
2 голосов
/ 09 июля 2020

По какой-то причине, когда в потоке на узле 8 возникает ошибка, она распространяется правильно и сопровождается конечным событием, однако на узле 10 это происходит в обратном порядке. (с использованием последней версии pumpify 2.0.1)

Пример:

'use strict';

const { PassThrough, Writable } = require('stream');

const pumpify = require('pumpify');

const stream1 = new PassThrough();
const stream2 = new Writable();

const combined = pumpify(stream1, stream2);

combined.on('end', () => {
    console.log('Stream end');
});
combined.on('error', e => {
    console.log('Stream error: ', e);
});

stream1.emit('error', 'aaa');
nvm use 8
Now using node v8.17.0 (npm v6.13.4)

node tmp.js
Stream error:  aaa
Stream end
nvm use 10
Now using node v10.19.0 (npm v6.13.4)

node tmp.js
Stream end
Stream error:  aaa

Обратите внимание на обратный порядок событий.

Это ожидаемое поведение ? Я что-то не так делаю?

1 Ответ

0 голосов
/ 14 июля 2020

До сих пор не совсем понимаю, что происходит, на случай, если это кому-то поможет. Проблема, похоже, в том, что PassThrough пуст. Если я заменю его на tar-fs и добавлю запись поверх потока, похоже, что он работает должным образом

'use strict';

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

const { pack } = require('tar-fs');
const pumpify = require('pumpify');

const stream1 = pack();
const stream2 = new Writable();

const combined = pumpify(stream1, stream2);

combined.on('end', () => {
    console.log('Stream end');
});
combined.on('error', e => {
    console.log('Stream error: ', e);
});

stream1.entry({ name: 'file1' }, 'artbitrary file1 contents');
stream1.emit('error', 'aaa');
nvm use 8
Now using node v8.17.0 (npm v6.13.4)

node tmp.js
Stream error:  aaa
Stream end
nvm use 10
Now using node v10.19.0 (npm v6.13.4)

node tmp.js
Stream error:  aaa
Stream end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...