JavaScript Symbol.asyncIterator — асинхронний перебір for await


Symbol.asyncIterator робить об'єкт перебірним у for await...of — коли кожен наступний елемент треба дочекатись.

автор: NagarD

Загальний опис

Звичайний ітератор віддає значення миттєво. А якщо кожне значення — це запит до сервера? Саме для цього й існує асинхронний протокол.

Найкорисніше застосування — посторінкове завантаження. Ти пишеш звичайний цикл for await (const item of api.items()), а всередині нього прозоро ходять запити за наступними сторінками. Логіка пагінації ховається в ітераторі, а код, що її споживає, лишається плоским.

Його ж має потік відповіді fetch — тіло відповіді можна читати шматками саме так.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
asyncIterator 63+ 57+ 11.1+ 50+ 79+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
asyncIterator 63+ yes yes 11.3+

Приклади

+ запропонувати свій приклад у пісочниці

Пагінація, яку не видно з боку споживача.

const api = {
    async *[Symbol.asyncIterator]() {
        // у житті сторінки приходять із fetch
        const pages = [
            [{ title: 'Перший' }, { title: 'Другий' }],
            [{ title: 'Третій' }],
            [],
        ];
        let page = 0;

        while (true) {
            const items = pages[page] || [];

            if (items.length === 0) {
                return;
            }

            yield* items;
            page++;
        }
    },
};

(async () => {
    // пагінації не видно — просто цикл
    for await (const item of api) {
        console.log(item.title);
    }
})();
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід