AbortSignal: метод timeout() статический
Примечание: Эта функция доступна в Потоках Web Workers.
Статический метод AbortSignal.timeout() возвращает AbortSignal, который автоматически прервёт выполнение после указанного времени.
Сигнал прерывается с исключением TimeoutError DOMException при истечении времени ожидания или с исключением AbortError DOMException при нажатии пользователем кнопки остановки браузера (или любой другой встроенной операции остановки). Это позволяет пользовательским интерфейсам различать ошибки истечения времени ожидания, которые, как правило, требуют уведомления пользователя, от прерываний, вызванных пользователем, которые не требуют уведомления.
Время ожидания основано на активном, а не на прошедшем времени, и фактически приостановится, если код выполняется в приостановленном потоке или пока документ находится в кеше обратной навигации («bfcache»).
Для объединения нескольких сигналов можно использовать AbortSignal.any(), например, для непосредственного прерывания загрузки с помощью сигнала истечения времени ожидания или вызова AbortController.abort().
Синтаксис
AbortSignal.timeout(time)
Параметры
time-
Время в миллисекундах ("активное") до прерывания возвращаемого
AbortSignal. Значение должно находиться в диапазоне от 0 доNumber.MAX_SAFE_INTEGER.
Возвращаемое значение
Объект AbortSignal.
Сигнал будет прерван со свойством AbortSignal.reason, установленным на TimeoutError DOMException при истечении времени ожидания или на AbortError DOMException если операция была прервана пользователем.
Примеры
Ниже приведен пример операции fetch, которая будет прервана по истечении 5 секунд, если она не будет успешной. Обратите внимание, что это также может завершиться ошибкой, если метод не поддерживается, если пользователь нажмёт кнопку "стоп" в браузере или по другой причине.
const url = "https://path_to_large_file.mp4";
try {
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
const result = await res.blob();
// …
} catch (err) {
if (err.name === "TimeoutError") {
console.error("Timeout: It took more than 5 seconds to get the result!");
} else if (err.name === "AbortError") {
console.error(
"Fetch aborted by user action (browser stop button, closing tab, etc.",
);
} else if (err.name === "TypeError") {
console.error("AbortSignal.timeout() method is not supported");
} else {
// A network error, or some other problem.
console.error(`Error: type: ${err.name}, message: ${err.message}`);
}
}
Спецификации
| Спецификация |
|---|
| DOM # ref-for-dom-abortsignal-timeout① |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
timeout_static |
124103–124Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
124103–124Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
100 | 11089–110Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
16 | 124103–124Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
100 | 8271–82Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
16 | 27.020.0–27.0Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
124103–124Всегда прерывается исключениемAbortError при истечении времени, а не TimeoutError. |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static