EDIT : La requête de récupération sera toujours exécutée en arrière-plan et enregistrera très probablement une erreur dans votre console.
En effet, le Promise.race
est meilleure.
Voir ce lien pour référence Promise.race()
La course signifie que toutes les promesses seront exécutées en même temps, et que la course s'arrêtera dès que l'une des promesses renverra une valeur. Par conséquent, une seule valeur sera retournée . Vous pouvez également passer une fonction à appeler si la recherche échoue.
fetchWithTimeout(url, {
method: 'POST',
body: formData,
credentials: 'include',
}, 5000, () => { /* do stuff here */ });
Si cela suscite votre intérêt, une mise en œuvre possible serait :
function fetchWithTimeout(url, options, delay, onTimeout) {
const timer = new Promise((resolve) => {
setTimeout(resolve, delay, {
timeout: true,
});
});
return Promise.race([
fetch(url, options),
timer
]).then(response => {
if (response.timeout) {
onTimeout();
}
return response;
});
}