Добавить в корзинуПозвонить
Найти в Дзене

Я пару месяцев назад сделал экспорт постов из Телеги в свой блог написанный на Astro, и агент навайбкодил мне такую конструкцию — for await

for await (const message of client.iterMessages(entity, { reverse: false })) { // .... } for await...of — это цикл для перебора асинхронных коллекций. Обычно он используется, когда данные приходят не все сразу, а постепенно: например, из API, базы данных, файла или постраничной загрузки. Сообщения подгружаются постепенно: for await берёт сообщения одно за другим, а когда текущая загруженная порция заканчивается, iterMessages делает следующий запрос в Telegram за новой порцией. Минимальный пример выглядит так: const delay = (value, ms) => new Promise((resolve) => setTimeout(() => resolve(value), ms)); async function* makeNumbers() { yield await delay(1, 1000); yield await delay(2, 1000); yield await delay(3, 1000); } async function run() { for await (const number of makeNumbers()) { console.log(number); } } run(); Наиболее простой для понимания пример применения — пагинация. Мы можем инкапсулировать всю работу с получением данных в асинхронном генераторе, и пройтись по коллекци

Я пару месяцев назад сделал экспорт постов из Телеги в свой блог написанный на Astro, и агент навайбкодил мне такую конструкцию — for await.

for await (const message of client.iterMessages(entity, { reverse: false })) {

// ....

}

for await...of — это цикл для перебора асинхронных коллекций.

Обычно он используется, когда данные приходят не все сразу, а постепенно: например, из API, базы данных, файла или постраничной загрузки.

Сообщения подгружаются постепенно: for await берёт сообщения одно за другим, а когда текущая загруженная порция заканчивается, iterMessages делает следующий запрос в Telegram за новой порцией.

Минимальный пример выглядит так:

const delay = (value, ms) =>

new Promise((resolve) => setTimeout(() => resolve(value), ms));

async function* makeNumbers() {

yield await delay(1, 1000);

yield await delay(2, 1000);

yield await delay(3, 1000);

}

async function run() {

for await (const number of makeNumbers()) {

console.log(number);

}

}

run();

Наиболее простой для понимания пример применения — пагинация. Мы можем инкапсулировать всю работу с получением данных в асинхронном генераторе, и пройтись по коллекции с помощью for await. Реальный пример можно посмотреть здесь или на второй картинке.

⚠️ Важный момент: for await работает последовательно. Он не запускает все итерации параллельно.

👍 — было полезно

👀 — уже знали про for await

А выгруженные посты, можно посмотреть 👉 здесь.

#javascript

-2