我有这个用例,我需要在 redux saga 中进行两次 api 调用。我需要来自第一个 api 的回复,并在我的第二个 api 调用中使用它。最后,我需要得到第二个api调用的响应并填充我的化简器数据。这就是我在一次 api 调用并向我的化简器发送响应时所做的。我担心在两个 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
});
}
}
我会将其分为两个函数,第一个函数具有第一个调用,具有自己的try/catch和自己的错误操作并返回请求数据。
然后我会检查该数据,当不为空时,使用自己的 try/catch 和错误处理再次调用第二个请求。
我认为您应该为第二个 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})
```