РЕДАГУВАТИ : Запит на отримання все ще буде виконуватися у фоновому режимі і, швидше за все, буде відображати помилку у вашій консолі.
Дійсно, Promise.race
підхід кращий.
Див. Це посилання для довідки Promise.race ()
Перегон означає, що всі обіцянки будуть виконуватися одночасно, і перегони припиняться, як тільки одна з обіцянок поверне значення. Тому буде повернуто лише одне значення . Ви також можете передати функцію для виклику, якщо час вибору закінчується.
fetchWithTimeout(url, {
method: 'POST',
body: formData,
credentials: 'include',
}, 5000, () => { });
Якщо це викликає у вас інтерес, можливою реалізацією буде:
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;
});
}