在我的 Redux 传奇中调用两个 API 异步,我需要来自第一个响应的数据来调用第二个 API



我有这个用例,我需要在 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})
```

最新更新