AbortSignal.timeout()

fetch(url, { signal: AbortSignal.timeout(ms) })

Renvoie un signal qui interrompt de lui-même l’opération après le nombre de millisecondes indiqué. C’est la façon la plus simple de donner une limite de temps à une requête.

Les exemples avec fetch() appellent une API d’exemple sur le même site : /api/products renvoie la liste des produits en JSON, /api/products/1 un seul produit (un identifiant inexistant renvoie 404), /api/slow répond au bout de 3 secondes.

Paramètres

  • ms – la limite en millisecondes.

Valeur de retour

Un objet AbortSignal.

Exemples

try {
  await fetch('/api/slow', { signal: AbortSignal.timeout(100) });
} catch (e) {
  console.log(e.name);
}
const o = await fetch('/api/products', { signal: AbortSignal.timeout(5000) });
console.log(o.ok);

Résultat – Chrome et Firefox :

TimeoutError
true

Résultat – Safari :

AbortError
true

Points d’attention

  • Selon la spécification, l’erreur après expiration du délai s’appelle TimeoutError, et après une interruption manuelle AbortError. Safari (WebKit) renvoyait dans notre test AbortError avec fetch() même après expiration du délai (voir l’exemple) – dans le catch, attendez-vous donc aux deux noms.
  • Vous combinez limite de temps et interruption manuelle avec AbortSignal.any([ac.signal, AbortSignal.timeout(5000)]).
  • Fait partie des interfaces récentes – Baseline depuis avril 2024.

Prise en charge par les navigateurs

Baseline – nouvellement disponible : dans tous les navigateurs courants depuis avril 2024 ; les versions plus anciennes des navigateurs ne le prennent pas en charge. Depuis la version : Chrome 124, Firefox 100, Safari 16 ; Node.js 17.3.0. État : octobre 2026 (MDN browser-compat-data).

Voir aussi :
AbortController
fetch()