#reactjs #redux #redux-saga
#reactjs #упрощение #redux-saga
Вопрос:
У меня есть этот вариант использования, когда мне нужно выполнить два вызова api внутри программы redux. Мне нужен ответ из первого api и я использую его во втором вызове api.В конце мне нужно получить ответ на второй вызов api и заполнить данные моего редуктора. Вот как я поступил в случае одного вызова api и отправил ответ моим редукторам.Я обеспокоен тем, как все должно происходить в случае двух вызовов api, потому что мой второй вызов api зависит от данных из первого вызова api. Я обеспокоен тем, как связать вещи в try catch.
export function* fetchSportsFanDetailsHandler() {
try {
const { authToken, sportsFanId } = yield select(state => ({
authToken: state.auth.authToken,
sportsFanId: state.auth.userId
}));
const sportsFanDetails = yield call(
fetchSportsFanDetails,
sportsFanId,
authToken
);
const { name, id, mobile, photo, communicationEmail } = sportsFanDetails;
yield put({
type: FETCH_SPORTS_FAN_DETAILS_SUCCESS,
response: sportsFanDetails
});
} catch (err) {
const { error } = err.response.data;
yield put({
type: FETCH_SPORTS_FAN_DETAILS_ERROR,
error: error.message
});
}
}
Ответ №1:
Я бы разделил его на две функции: первая с первым вызовом с его собственной попыткой / уловом и собственным действием ошибки и возвращает данные запроса.
Затем я бы проверил эти данные и, если они не пустые, снова вызвал второй запрос с его собственной попыткой / перехватом и обработкой ошибок.
Ответ №2:
я думаю, вам следует создать отдельный метод для второго запроса api, а затем использовать его в отдельном эффекте вызова, после того как вы используете эффект put для первого запроса api, затем используйте эффект второго вызова с результатом первого ответа api, который вам нужен.
например:
```
const result = yield call(someMethod, params)
yield put({type: ACTION, result})
const response = yield call(anotherMethod, result)
yield put({type: ACTION_SECOND, response})
```