如何链接异步操作redux saga(获取XHR请求)

问题描述 投票:1回答:1

是否有一些通常的模式可以同步链接redux-saga异步请求?例如。 1个函数加载用户ID,第二个函数使用该ID调用一些API请求。我将尝试演示(此代码不是解决方案,只是演示)

function* laodUserSaga(action) {
  try {
    const res = yield apiGet('/user')
    const onboardingData = yield res.json()
    yield  put.resolve(loadUserSuccess(camelizeKeys(onboardingData)))
  } catch (error) {
    yield put.resolve(loadUserError(error))
  }
}
function* loadProfileDataByUserID(action) {
  const state = yield select();
  try {
    const res = yield apiGet(`/user/${state.userID}user-profile`)
    const onboardingData = yield res.json()
    yield  put.resolve(loadUserSuccess(camelizeKeys(onboardingData)))
  } catch (error) {
    yield put.resolve(loadUserError(error))
  }
}
function* loadProfileWithDataSaga(aciton){
  yield put(laodUserSaga)
  yield put(loadProfileDataByUserID)
}

function* sagaConnect() {
  yield all([
    takeLatest(LOAD_USER, laodUserSaga),
    takeLatest(LOAD_USER_DATA_BY_PROFILE_ID, loadProfileDataByUserID),
    takeLatest(LOAD_USER_WITH_PROFILE, loadProfileWithDataSaga),
  ])
}

你看,这样的例子在每个图书馆的文档中都非常有用,1个真实世界的例子往往是我在几秒钟内理解的,我是唯一的吗?

asynchronous redux redux-saga
1个回答
0
投票

你不必使用takeEvery / Latest助手来启动每个传奇。

你可以像其他任何功能一样召唤传奇,例如:

function* loadProfileWithDataSaga() {
  const user = yield call(loadUser)
  const profileData = yield call(loadProfileDataByUserID, user.id)
}

你只需要写loadUserloadProfileDataByUserID sagas,以便他们接收并返回正确的值。如果你想通过调度动作仍然能够在其他场景中调用它们,我会创建另一个只包装loadUser / Profile功能的传奇。

© www.soinside.com 2019 - 2024. All rights reserved.