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,
// }