AbortSignal: метод any() статический
Базовая версия 2024
Новая возможность
С марта 2024 года эта функция работает во всех последних версиях устройств и браузеров. Эта функция может не работать в старых устройствах или браузерах.
Примечание: Эта функция доступна в Веб-воркерах.
Статический метод AbortSignal.any() принимает итерируемый объект сигналов прерывания и возвращает AbortSignal. Возвращаемый сигнал прерывания завершается, когда любой из входных сигналов прерывания завершается. Причина завершения будет установлена в причину первого сигнала прерывания, который завершился. Если какой-либо из заданных сигналов прерывания уже завершен, то возвращаемый AbortSignal также будет завершен.
Синтаксис
AbortSignal.any(iterable)
Параметры
Возвращаемое значение
AbortSignal, который:
-
Уже завершен, если любой из заданных сигналов прерывания уже завершен. Причина завершения возвращаемого
AbortSignalбудет установлена в причину первого сигнала прерывания, который уже был завершен. -
Асинхронно завершен, когда любой сигнал прерывания в
iterableзавершается. Причина завершения будет установлена в причину первого сигнала прерывания, который завершился.
Примеры
Использование AbortSignal.any()
Этот пример демонстрирует объединение сигнала от AbortController и сигнала таймаута от AbortSignal.timeout.
const cancelDownloadButton = document.getElementById("cancelDownloadButton");
const userCancelController = new AbortController();
cancelDownloadButton.addEventListener("click", () => {
userCancelController.abort();
});
// Timeout after 5 minutes
const timeoutSignal = AbortSignal.timeout(1_000 * 60 * 5);
// This signal will abort when either the user clicks the cancel button or 5 minutes is up
// whichever is sooner
const combinedSignal = AbortSignal.any([
userCancelController.signal,
timeoutSignal,
]);
try {
const res = await fetch(someUrlToDownload, {
// Stop the fetch when any of the signals aborts
signal: combinedSignal,
});
const body = await res.blob();
// Do something with downloaded content:
// ...
} catch (e) {
if (e.name === "AbortError") {
// Cancelled by the user
} else if (e.name === "TimeoutError") {
// Show user that download timed out
} else {
// Other error, e.g. network error
}
}
Спецификации
| Спецификация |
|---|
| DOM # dom-abortsignal-any |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
any_static |
116 | 116 | 124 | 102 | 17.4 | 116 | 124 | 78 | 17.4 | 24.0 | 116 |
© 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/any_static