我让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))
之前完成
对此的任何帮助将不胜感激
最佳答案
以下是一些实现此目的的方法:
阻止
actionCreators.addUserSuccess
当
actionCreators.addUserSuccess
完成时调度另一个操作
使 actionCreators.addUserSuccess
阻塞
有 putResolve
用于阻止效果的效果创建器。仅当 addUserSuccess 返回需要解决的 promise 时,这才有用。
const response = yield putResolve(actionCreators.addUserSuccess(user.data))
// use resolved promise in next operation
当 actionCreators.addUserSuccess 完成
时调度另一个操作)
如果 actionCreators.addUserSuccess
不返回 promise ,这是一个更好的方法。
当 actionCreators.addUserSuccess
完成时调度另一个操作 take
那个 Action 。
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))
}
关于javascript - 让yield.put在redux-saga中一个接一个地发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55274449/