在我的redux Saga 中调用两个api异步,我需要第一个响应中的数据来调用第二个api

rdlzhqv9  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(161)

我有这样一个用例,我需要在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
      });
    }
}
5lwkijsr

5lwkijsr1#

我将把它分成两个函数,第一个函数的第一个调用有自己的try/catch和自己的error操作,并返回请求数据。
然后,我将检查该数据,当不为空时,再次调用第二个请求,并使用它自己的try/catch和错误处理。

zzwlnbp8

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})

相关问题