我让yield.put一个接一个地发生,因为异步行为对我的实现不利。
发电机功能
export function * createUser (action) {
try {
axios.defaults.headers.common['Authorization'] =
'Bearer ' + localStorage.getItem('userAccessToken')
console.log(action.payload)
const user = yield call(axios.post, api.createUser, action.payload)
yield put(actionCreators.addUserSuccess(user.data))
const qs = queryString.stringify(action.payload)
const endpoint = `${api.createUser}?${qs}`
console.log(endpoint)
const users = yield call(axios.get, endpoint)
console.log(users)
yield put(actionCreators.fetchUsersSuccess(users.data))
} catch (error) {
yield put(actionCreators.addUserFailure(error))
}
}
我有这个生成器功能,我想要
yield put(actionCreators.addUserSuccess(user.data))
在调用yield put(actionCreators.fetchUsersSuccess(users.data))
之前完成
对此将提供任何帮助
答案 0 :(得分:0)
以下是一些解决方法:
进行actionCreators.addUserSuccess
屏蔽
actionCreators.addUserSuccess
完成后调度另一个操作
阻止actionCreators.addUserSuccess
有一个putResolve
效果创建者可以阻止效果。仅当addUserSuccess返回需要解决的承诺时,此功能才有用。
const response = yield putResolve(actionCreators.addUserSuccess(user.data))
// use resolved promise in next operation
在actionCreators.addUserSuccess completes
)
actionCreators.addUserSuccess
没有返回承诺的地方,这是一种更好的选择。
在actionCreators.addUserSuccess
完成后take
执行该操作。
while (true) {
// say this is the action type that is dispatched in the
// middleware that runs actionCreators.addUserSuccess
const action = yield take('FETCH_USERS');
yield put(actionCreators.fetchUsersSuccess(action.users.data))
}