EDYTUJ : Żądanie pobierania będzie nadal działało w tle i najprawdopodobniej zarejestruje błąd w konsoli.
Rzeczywiście Promise.race
podejście jest lepsze.
Zobacz ten link, aby zapoznać się z Promise.race ()
Wyścig oznacza, że wszystkie obietnice zostaną uruchomione w tym samym czasie, a wyścig zostanie zatrzymany, gdy tylko jedna z obietnic zwróci wartość. Dlatego zostanie zwrócona tylko jedna wartość . Możesz również przekazać funkcję do wywołania, jeśli upłynie limit czasu pobierania.
fetchWithTimeout(url, {
method: 'POST',
body: formData,
credentials: 'include',
}, 5000, () => { });
Jeśli to wzbudzi Twoje zainteresowanie, możliwa implementacja to:
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;
});
}