Skip to content

Commit 05b7b8d

Browse files
julien-fMylesBorins
authored andcommitted
stream: fix error handling with async iteration
Fix an issue when an error was emitted by the stream before `iterator.next()` is called. PR-URL: #20329 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
1 parent 348d391 commit 05b7b8d

2 files changed

Lines changed: 13 additions & 1 deletion

File tree

‎lib/internal/streams/async_iterator.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ function onError(iter, err) {
5858
iter[kLastReject]=null;
5959
reject(err);
6060
}
61-
iter.error=err;
61+
iter[kError]=err;
6262
}
6363

6464
functionwrapForNext(lastPromise,iter){

‎test/parallel/test-stream-readable-async-iterators.js‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,18 @@ async function tests() {
115115
readable.destroy(newError('kaboom'));
116116
})();
117117

118+
await(asyncfunction(){
119+
console.log('call next() after error');
120+
constreadable=newReadable({
121+
read(){}
122+
});
123+
constiterator=readable[Symbol.asyncIterator]();
124+
125+
consterr=newError('kaboom');
126+
readable.destroy(newError('kaboom'));
127+
awaitassert.rejects(iterator.next.bind(iterator),err);
128+
})();
129+
118130
await(asyncfunction(){
119131
console.log('read object mode');
120132
constmax=42;

0 commit comments

Comments
 (0)