diff options
author | Robert Nagy <ronagy@icloud.com> | 2020-05-01 23:02:42 +0200 |
---|---|---|
committer | Robert Nagy <ronagy@icloud.com> | 2020-05-06 22:39:33 +0200 |
commit | 8607f9ec5c2a488f5df7f9eb3e5f5c7dfa0b492a (patch) | |
tree | 2051a5b207530fbf95b51a9d7cfca1be1e90dff0 /test/parallel/test-readable-from.js | |
parent | 3662b0c2c75b670599c363be8322064a3359e432 (diff) | |
download | node-new-8607f9ec5c2a488f5df7f9eb3e5f5c7dfa0b492a.tar.gz |
stream: make from read one at a time
Currently from will eagerly buffer up items
which means that errors are also eagerly
encountered and items which are buffer when
an error occurs will be discarded, which is
inconsistent with how generators work.
Fixes: https://github.com/nodejs/node/issues/29428
PR-URL: https://github.com/nodejs/node/pull/33201
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test/parallel/test-readable-from.js')
-rw-r--r-- | test/parallel/test-readable-from.js | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/test/parallel/test-readable-from.js b/test/parallel/test-readable-from.js index 6cc9216a30..94bc2c1ae4 100644 --- a/test/parallel/test-readable-from.js +++ b/test/parallel/test-readable-from.js @@ -159,6 +159,29 @@ async function asTransformStream() { } } +async function endWithError() { + async function* generate() { + yield 1; + yield 2; + yield Promise.reject('Boum'); + } + + const stream = Readable.from(generate()); + + const expected = [1, 2]; + + try { + for await (const chunk of stream) { + strictEqual(chunk, expected.shift()); + } + throw new Error(); + } catch (err) { + strictEqual(expected.length, 0); + strictEqual(err, 'Boum'); + } +} + + Promise.all([ toReadableBasicSupport(), toReadableSyncIterator(), @@ -168,5 +191,6 @@ Promise.all([ toReadableOnData(), toReadableOnDataNonObject(), destroysTheStreamWhenThrowing(), - asTransformStream() + asTransformStream(), + endWithError() ]).then(mustCall()); |