Как проверить fetch на успех?

96
16 апреля 2022, 21:40

Подскажите в чем может быть проблема.

Хочу сделать интервал на получаение данных, но если статус ответа не равен 200, тогда останавливаю интервал и создаю новый только через 30 секунд.

Код ниже не работает.

let getCurrent = () => {
  fetch('https://radio.mcm.fm/')
    .then(function(res) {
      if (res.status !== 200) {
        clearInterval(timerId)
        setTimeout(() => {
          const timerId = setInterval(() => {
            getCurrent()
          }, 3000)
        }, 30000)
        return
      }
    })
    .then(res => {
      this.props.importCurrentSong(res.current_track)
    })
    .catch(function(err) {
      console.log('Fetch Error :-S', err);
    });
}
const timerId = setInterval(() => {
  getCurrent()
}, 3000)

Answer 1

На самом деле тут не нужен setInterval, удобнее в обработчике каждого запроса устанавливать отложенный таймер на следующий запрос:

let getCurrent = () => {
  console.log(`connecting... ${new Date().toISOString()}`);
  const controller = new AbortController();
  const timeoutId = setTimeout(() => controller.abort(), 5000);
  fetch('https://radio.mcm.fm/', { signal: controller.signal })
    .then((res) => {
      if (res.status === 200) {
        return res.json();
      } else {
        return Promise.reject('something wrong');
      }
    })
    .then((res) => {
      console.log('ok');
      setTimeout(getCurrent, 3000);
      this.props.importCurrentSong(res.current_track);
    })
    .catch((err) => {
      console.log('fail');
      setTimeout(getCurrent, 25000);
    });
}
getCurrent();

READ ALSO
В javascript е функция не меняет переменную

В javascript е функция не меняет переменную

Здравствуйте есть две функции

121
Почему не работает делегирование?

Почему не работает делегирование?

Изучаю тему по учебникуВ нем есть пример, который работает в сэндбоксе

135
Где хранить service worker?

Где хранить service worker?

Загорелся идеей добавить service worker при помощи workbox в существующий проект на WordPress, но столкнулся с одной проблемой: где его расположить и как...

113