diff --git a/lib/internal/streams/from.js b/lib/internal/streams/from.js index 6752679ae3bc2b..13e8a73980ddd1 100644 --- a/lib/internal/streams/from.js +++ b/lib/internal/streams/from.js @@ -33,6 +33,8 @@ function from(Readable, iterable, opts) { const readable = new Readable({ objectMode: true, + highWaterMark: 1, + // TODO(ronag): What options should be allowed? ...opts }); diff --git a/test/parallel/test-readable-from.js b/test/parallel/test-readable-from.js index 6cc9216a306378..94bc2c1ae4b926 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());