javascript - 让yield.put在redux-saga中一个接一个地发生

标签 javascript reactjs redux react-redux redux-saga

我让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/

相关文章:

javascript - 在 React 中使用 Buttons 触发 react-table 上的过滤功能

Angular 4,ng2-redux : Could not find a declaration file for module 'redux-logger'

reactjs - Redux:getState 的实际应用

javascript - React-i18next,从 props 添加资源

javascript - 未捕获的类型错误 : Cannot read property '0' of null

javascript - RegEx:定义一些替换的异常(exception)情况

reactjs - 如何禁用子组件上的 PanResponder - React Native

javascript - componentDidMount 在 ref 回调之前被调用

javascript - react DVA JS 框架 : Reset entire state application

javascript - 使用 wikipedia api contentmodel 返回未知的 mustache 大括号