是否有一些通常的模式可以同步链接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个真实世界的例子通常是我在几秒钟内理解的,我是唯一的吗?
答案 0 :(得分:0)
您不必使用takeEvery / Latest helper启动每个传奇。
你可以像任何其他函数一样调用传奇,例如:
function* loadProfileWithDataSaga() {
const user = yield call(loadUser)
const profileData = yield call(loadProfileDataByUserID, user.id)
}
您只需要撰写loadUser
和loadProfileDataByUserID
传奇,以便他们接收并返回正确的值。如果你想通过调度动作仍然能够在其他场景中调用它们,我会创建另一个只包装loadUser / Profile功能的传奇。