Fetch With Timeout
function fetchWithTimeout(api, delay) {
return new Promise((resolve, reject) => {
const abortController = new AbortController();
const signal = abortController.signal;
let timerId;
fetch(api, {
signal,
})
.then((res) => res.json())
.then((data) => {
clearTimeout(timerId);
resolve(data);
})
.catch((err) => reject(err));
timerId = setTimeout(() => {
console.log("Aborted");
abortController.abort();
}, delay);
});
}
fetchWithTimeout("https://jsonplaceholder.typicode.com/todos/1", 100)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
// Aborted
fetchWithTimeout("https://jsonplaceholder.typicode.com/todos/1", 1000)
.then((res) => {
console.log(res);
})
.catch((err) => {
console.error(err);
});
// {
// userId: 1,
// id: 1,
// title: "delectus aut autem",
// completed: false,
// }