Как установить тайм-аут для вызова yield в React Redux-Saga

#reactjs #react-redux #redux-saga

#reactjs #react-redux #redux-saga

Вопрос:

В моем бэкэнде rest API я выполняю интенсивную обработку, и обычно для получения результата требуется 1,5 минуты, за это время я получаю эту ошибку в моем интерфейсном приложении react.

 Error: timeout of 60000ms exceeded
  

Итак, одноранговое соединение потеряно.

Как мне установить время ожидания запроса в redux-saga

Комментарии:

1. Это может происходить по ряду причин, и вы не предоставили никаких подробностей о том, как настроено ваше приложение. Вы проверили свой веб-сервер / прокси на наличие ограничений по времени ожидания? Существуют ли ограничения по тайм-ауту для вызовов ajax во внешнем интерфейсе, выполняемых react?

Ответ №1:

меня использовали race для таких вещей. Может быть, это будет полезно для вас.

   const {posts, timeout} = yield race({
    posts: call(fetchApi, '/posts'),
    timeout: delay(60 * 1000)
  });
  if (timeout) throw new Error('timeout of 60000ms exceeded') 
  

Ответ №2:

 import { eventChannel, END } from 'redux-saga'

function countdown(secs) {
  return eventChannel(emitter => {
      const iv = setInterval(() => {
        secs -= 1
        if (secs > 0) {
          emitter(secs)
        } else {
          // this causes the channel to close
          emitter(END)
        }
      }, 1000);
      // The subscriber must return an unsubscribe function
      return () => {
        clearInterval(iv)
      }
    }
  )
}
  

Надеюсь, это поможет.

Ответ №3:

 export function* create(action) {
  try {
    const { payload } = action;
    const response = yield call(api.addPost, payload);
    if (response.status === 200) {
      console.log('pass 200 check');
      yield put(appActions.setResourceResponse(response.data));
      console.log(response.data);
      payload.push('/add-news');
    }
  } catch (error) {
    console.log(error);
    yield put(
      a.setResponse({
        message: error.response.data,
        status: error.response.status,
      }),
    );
  }
}
  

Комментарии:

1. тайм-аут возникает во время вызова API из django rest API