Spec-Zone.ru › Web APIs

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 124
103–124Всегда прерывается исключением AbortError при истечении времени, а не TimeoutError.
124
103–124Всегда прерывается исключением AbortError при истечении времени, а не TimeoutError.
100 110
89–110Всегда прерывается исключением AbortError при истечении времени, а не TimeoutError.
16 124
103–124Всегда прерывается исключением AbortError при истечении времени, а не TimeoutError.
100 82
71–82Всегда прерывается исключением AbortError при истечении времени, а не TimeoutError.
16 27.0
20.0–27.0Всегда прерывается исключением AbortError при истечении времени, а не TimeoutError.
124
103–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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API