We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 7c42d9f commit 111f0bdCopy full SHA for 111f0bd
2 files changed
lib/internal/streams/duplexify.js
@@ -209,22 +209,28 @@ function fromAsyncGen(fn) {
209
const signal = ac.signal;
210
const value = fn(async function*() {
211
while (true) {
212
- const { chunk, done, cb } = await promise;
+ const _promise = promise;
213
+ promise = null;
214
+ const { chunk, done, cb } = await _promise;
215
process.nextTick(cb);
216
if (done) return;
217
if (signal.aborted) throw new AbortError();
- yield chunk;
218
({ promise, resolve } = createDeferredPromise());
219
+ yield chunk;
220
}
221
}(), { signal });
222
223
return {
224
value,
225
write(chunk, encoding, cb) {
- resolve({ chunk, done: false, cb });
226
+ const _resolve = resolve;
227
+ resolve = null;
228
+ _resolve({ chunk, done: false, cb });
229
},
230
final(cb) {
- resolve({ done: true, cb });
231
232
233
+ _resolve({ done: true, cb });
234
235
destroy(err, cb) {
236
ac.abort();
test/parallel/test-stream-duplex-from.js
@@ -2,7 +2,7 @@
2
3
const common = require('../common');
4
const assert = require('assert');
5
-const { Duplex, Readable, Writable } = require('stream');
+const { Duplex, Readable, Writable, pipeline } = require('stream');
6
7
{
8
const d = Duplex.from({
@@ -118,3 +118,29 @@ const { Duplex, Readable, Writable } = require('stream');
118
assert.strictEqual(d.readable, false);
119
}));
120
121
+
122
+{
123
+ // https://github.com/nodejs/node/issues/40497
124
+ pipeline(
125
+ ['abc\ndef\nghi'],
126
+ Duplex.from(async function * (source) {
127
+ let rest = '';
128
+ for await (const chunk of source) {
129
+ const lines = (rest + chunk.toString()).split('\n');
130
+ rest = lines.pop();
131
+ for (const line of lines) {
132
+ yield line;
133
+ }
134
135
+ yield rest;
136
+ }),
137
+ async function * (source) {
138
+ let ret = '';
139
+ for await (const x of source) {
140
+ ret += x;
141
142
+ assert.strictEqual(ret, 'abcdefghi');
143
+ },
144
+ common.mustCall(() => {}),
145
+ );
146
+}
0 commit comments