История изменений
Исправление ChALkeR, (текущая версия) :
for await (const line of readLines(filePath)) {
console.log(line);
}
Вот пример. Это, по сути, асинхронное перечисление.
Два момента:
- Итерации идут асинхронно.
- Они могут кончиться (когда закончится файл или поток). Причём этот флаг тоже, очевидно, прилетает асинхронно, вместе со значением.
Да, его можно реализовать через for () { await }, но тогда в каждой итерации надо будет получать не строчку, а каскад из строчки и флага останова/продолжения и проверять их ручками, делая break.
Генераторы, собственно, и нужны для этого — они на каждой итерации выдают такую пару, и сахар for-of спасает от проверки этого руками. Но этого сахара до for await не было для асинхронного перечисления.
В примере выше readLines — генератор, который выдаёт промисы.
Аналогичный вышеприведённому код у тебя выглядел бы так:
const stream = readLines(filePath);
for (;;) {
const { value, done } = await stream.next();
if (done) break;
const line = value;
}
Ну и плюс сахар для самого определения генераторов, которые возвращают промисы.
Исходная версия ChALkeR, :
for await (const line of readLines(filePath)) {
console.log(line);
}
Вот пример. Это, по сути, асинхронное перечисление.
Два момента:
- Итерации идут асинхронно.
- Они могут кончиться (когда закончится файл или поток). Причём этот флаг тоже, очевидно, прилетает асинхронно, вместе со значением.
Да, его можно реализовать через for () { await }, но тогда в каждой итерации надо будет получать не строчку, а каскад из строчки и флага останова/продолжения и проверять их ручками, делая break.
Генераторы, собственно, и нужны для этого — они на каждой итерации выдают такую пару, и сахар for-of спасает от проверки этого руками. Но этого сахара до for await не было для асинхронного перечисления.
C примером `for await` — readLines — генератор, который выдаёт промисы.
Аналогичный вышеприведённому код у тебя выглядел бы так:
const stream = readLines(filePath);
for (;;) {
const { value, done } = await stream.next();
if (done) break;
const line = value;
}
Ну и плюс сахар для самого определения генераторов, которые возвращают промисы.