Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

AbortSignal : méthode statique any()

Baseline 2024
Nouvellement disponible

Depuis mars 2024, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

Note : Cette fonctionnalité est disponible via les Web Workers.

La méthode statique any() de l'interface AbortSignal prend un itérable de signaux d'annulation et retourne un objet AbortSignal. Le signal d'annulation retourné est annulé dès qu'un des signaux d'entrée de l'itérable est annulé. La raison d'annulation est définie sur la raison du premier signal annulé. Si l'un des signaux donnés est déjà annulé, le AbortSignal retourné l'est aussi.

Syntaxe

js
AbortSignal.any(iterable)

Paramètres

iterable

Un itérable (comme un Array) de signaux d'annulation.

Valeur de retour

Un objet AbortSignal qui est :

  • Déjà annulé, si l'un des signaux donnés est déjà annulé. La raison du AbortSignal retourné est déjà définie sur la reason du premier signal déjà annulé.
  • Annulé de façon asynchrone, quand un signal d'annulation d'un iterable est annulé. La reason est définie sur la raison du premier signal annulé.

Description

AbortSignal.any() ne fournit pas de méthode pour désabonner le signal retourné de ses signaux d'entrée. L'annulation du signal retourné n'annule pas les autres signaux d'entrée et ne supprime pas leurs délais d'attente.

En interne, le signal combiné et ses signaux sources sont liés par des références faibles. Les signaux combinés ne sont pas intrinsèquement bloqués pour la collecte des ordures tant que les signaux d'entrée restent actifs. Cependant, un signal combiné non annulé est maintenu en vie tant qu'il a encore des signaux sources et soit des écouteurs d'évènements abort enregistrés, soit des étapes d'annulation internes enregistrées par une API.

Si votre code ajoute des écouteurs abort au signal combiné, supprimez-les lorsque l'opération se termine, tout comme vous le faites pour tout autre AbortSignal.

Exemples

Utiliser AbortSignal.any()

Cet exemple montre comment combiner à la fois un signal provenant d'un AbortController et un signal de délai d'expiration provenant de AbortSignal.timeout.

js
const cancelDownloadButton = document.getElementById("cancelDownloadButton");

const userCancelController = new AbortController();

cancelDownloadButton.addEventListener("click", () => {
  userCancelController.abort();
});

// Délai d'attente après 5 minutes
const timeoutSignal = AbortSignal.timeout(1_000 * 60 * 5);

// Ce signal est annulé soit lorsque l'utilisateur·ice clique sur le bouton d'annulation, soit après 5 minutes
// selon ce qui arrive en premier
const combinedSignal = AbortSignal.any([
  userCancelController.signal,
  timeoutSignal,
]);

try {
  const res = await fetch(someUrlToDownload, {
    // Arrête le fetch dès qu'un des signaux est annulé
    signal: combinedSignal,
  });
  const body = await res.blob();
  // Traite le contenu téléchargé :
  // …
} catch (e) {
  if (e.name === "AbortError") {
    // Annulé par l'utilisateur·ice
  } else if (e.name === "TimeoutError") {
    // Affiche à l'utilisateur·ice que le téléchargement a expiré
  } else {
    // Autre erreur, par exemple une erreur réseau
  }
}

Spécifications

Spécification
DOM
# dom-abortsignal-any

Compatibilité des navigateurs