-
Notifications
You must be signed in to change notification settings - Fork 168
Open
Description
What is the issue with the Streams Standard?
Is it intended by the spec that breaking async iteration of a teed stream halts the execution of the program until all branches are cancelled?
const rs = new ReadableStream({
start(controller) {
let i = 0;
const interval = setInterval(() => {
controller.enqueue(i++);
}, 100);
// Clean up when canceled
this._cancel = () => {
clearInterval(interval);
console.log('cancelled');
};
},
cancel(reason) {
console.log('cancel() called with', reason);
this._cancel?.();
return Promise.resolve();
},
});
const [r1, r2] = rs.tee();
let i = 0;
(async () => {
for await (const val of r1) {
console.log('r1', val);
if (i++ > 2) {
console.log('breaking r1');
break;
}
}
console.log('finished r1 loop');
})();
Right now in all environments I tested in (browsers and across NodeJS versions) the last log I get is "breaking r1"
- finished r1 loop
never gets logged
Metadata
Metadata
Assignees
Labels
No labels