JavaScript AbortController.abort() — скасувати запит чи обробники


Метод abort() скасовує все, що слухає сигнал цього контролера.

автор: NagarD

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

Одна дія — багато наслідків: обірветься fetch, знімуться обробники подій, навішані з цим сигналом, зупиниться все, що вміє його слухати.

Скасований fetch падає з помилкою на ім'я AbortError. Це не збій, а очікуваний результат, тож у catch його треба відрізняти від справжніх помилок мережі — інакше в журнал полетять фальшиві збої.

Контролер одноразовий: після abort() його сигнал назавжди лишається скасованим. Для наступного запиту потрібен новий контролер.

Аргументом можна передати причину — вона прилетить у signal.reason.

автор: NagarD

Нотатка

Контролер не перевикористовується. Після abort() кожен новий fetch із тим самим сигналом упаде миттєво, ще не вийшовши в мережу.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
abort 66+ 57+ 12.1+ 53+ 16+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
abort 66+ yes yes 12.2+

Приклади

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

Пошук, що обриває попередній запит — і не логує фальшивих збоїв.

HTML

<div id="demo-input">Демонстраційний елемент</div>

JS

const input = document.getElementById('demo-input');

let controller;

input.addEventListener('input', async () => {
    controller?.abort();

    // ЩОРАЗУ новий — старий уже мертвий
    controller = new AbortController();

    try {
        const response = await fetch('/search?q=' + input.value, {
            signal: controller.signal,
        });

        show(await response.json());
    } catch (error) {
        // скасування — не збій
        if (error.name !== 'AbortError') {
            throw error;
        }
    }
});
автор: NagarD

Коментарі

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

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

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

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

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

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

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

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

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

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

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