- From: Mattias Buelens <notifications@github.com>
- Date: Tue, 20 Jun 2023 05:32:53 -0700
- To: whatwg/streams <streams@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
Received on Tuesday, 20 June 2023 12:33:00 UTC
`for..of` doesn't call `throw()` either. ```javascript let it = { [Symbol.iterator]: () => it, next() { return { done: false, value: "a" }; }, throw(e) { console.log("it.throw() called"); return { done: true }; }, return() { console.log("it.return() called"); return { done: true }; } }; for (const elem of it) { throw new Error("boom!"); } ``` The above snippet logs: ``` it.return() called Uncaught Error: boom! ``` So even if we added such a hook, it wouldn't do anything in your example. AFAIK the only built-in construct that interacts with `throw()` is `yield*`. I don't see how we could ever make `throw()` work. With generators, `throw()` can still cause the generator to *resume normally*, as in the following example: ```javascript function* gen() { while (true) { try { yield; } catch { continue; } } } ``` But with `for..of`, throwing inside the loop body *must* propagate upwards. We cannot "resume iteration" afterwards. So we only have `return()`. -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/streams/issues/1284#issuecomment-1598684724 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/streams/issues/1284/1598684724@github.com>
Received on Tuesday, 20 June 2023 12:33:00 UTC