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 manuelleAbortError. Safari (WebKit) renvoyait dans notre testAbortErroravec 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()