Пытался выяснить, что именно делает for await .. of
. Тем не менее, даже читая спецификации, я не смог найти точно, что он делает.
Вот мое предположение:
const it = iterable[Synbol.asyncIterator]();
while (true) {
const { done, value } = await it.next();
if (done) return;
// User code...
}
Однако, если итератор реализует return
и throw
Я не уверен, где / как они вступают в игру?
Одно предположение:
const it = iterable[Synbol.asyncIterator]();
try {
while (true) {
const { done, value } = await it.next();
if (done) return;
try {
// User code...
} catch (err) {
const { done } = await it.throw(err);
if (done) return;
}
}
} finally {
it.return();
}