#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