我有这样一个用例,我需要在redux Saga 中进行两次api调用。我需要第一次api的响应,并在第二次api调用中使用它。最后,我需要得到第二个api调用的响应并填充我的reducers数据。这是我在一个api调用的情况下所做的,并将响应发送到我的reducers。我关心的是在两个apis调用的情况下事情会如何发生,因为我的第二个api调用依赖于第一个api调用的数据。
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
});
}
}
2条答案
按热度按时间5lwkijsr1#
我将把它分成两个函数,第一个函数的第一个调用有自己的try/catch和自己的error操作,并返回请求数据。
然后,我将检查该数据,当不为空时,再次调用第二个请求,并使用它自己的try/catch和错误处理。
zzwlnbp82#
我认为你应该为第二个api请求创建单独的方法,然后在单独的调用效果中使用它,在你为第一个api请求使用put效果后,然后使用第二个调用效果,从第一个api响应中得到你需要的结果。
例如:
const result = yield call(someMethod, params)
yield put({type: ACTION, result})
const response = yield call(anotherMethod, result)
yield put({type: ACTION_SECOND, response})