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 timeout()

Baseline 2024
Newly available

Depuis ⁨April 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 timeout() de l'interface AbortSignal retourne un objet AbortSignal qui s'annulera automatiquement après un temps défini.

Le signal s'annule avec une erreur DOMException TimeoutError en cas de délai dépassé.

Le délai est basé sur le temps d'activité et non le temps écoulé, et sera effectivement mis en pause si le code s'exécute dans un worker suspendu ou si le document est dans le cache d'historique (« bfcache (angl.) »).

Pour combiner plusieurs signaux, vous pouvez utiliser AbortSignal.any(), par exemple pour annuler directement un téléchargement soit avec un signal de délai, soit en appelant AbortController.abort().

Syntaxe

js
AbortSignal.timeout(time)

Paramètres

time

Le temps « actif » en millisecondes avant que le AbortSignal retourné ne s'annule. La valeur doit être comprise entre 0 et Number.MAX_SAFE_INTEGER.

Valeur de retour

Un objet AbortSignal.

Le signal s'annulera avec sa propriété AbortSignal.reason définie à DOMException TimeoutError en cas de délai, ou à DOMException AbortError si l'opération a été annulée par l'utilisateur·ice.

Exemples

Voici un exemple montrant une opération fetch qui expirera si elle n'aboutit pas après 5 secondes. Notez que cela peut aussi échouer si la méthode n'est pas supportée, si le bouton « stop » du navigateur est pressé, ou pour une autre raison.

js
const url = "https://chemin_vers_le_fichier.mp4";

try {
  const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
  const result = await res.blob();
  // …
} catch (err) {
  if (err.name === "TimeoutError") {
    // Cette exception provient du signal d'annulation
    console.error(
      "Délai dépassé : il a fallu plus de 5 secondes pour obtenir le résultat !",
    );
  } else if (err.name === "AbortError") {
    // Cette exception provient du fetch lui-même
    console.error(
      "La récupération a été annulée par une action utilisateur (bouton d'arrêt du navigateur, fermeture de l'onglet, etc.).",
    );
  } else if (err.name === "TypeError") {
    console.error("La méthode AbortSignal.timeout() n'est pas supportée");
  } else {
    // Une erreur réseau, ou un autre problème.
    console.error(`Erreur : type : ${err.name}, message : ${err.message}`);
  }
}

Spécifications

Specification
DOM
# ref-for-dom-abortsignal-timeout①

Compatibilité des navigateurs