Redux Saga:等待Saga完全完成

时间:2018-12-18 14:21:07

标签: reactjs redux redux-saga

如何等待传奇完成并执行其他一些代码之后。 我有这样的传奇:

//users sagas file
export function* saveUsersRequest() {
  yield takeLatest(SAVE_USER_REQUEST, function* (payload) {
    const { user } = payload
    const url = '/api/users'

    const request = postForResponse(url, user)  //axios request
    const { response, error } = yield call(request)
    if (response) {
      yield put({
        type: SAVE_USER_SUCCESS,
        data: response.data
      })
    } else {
      yield put({
        type: SAVE_USER_ERROR,
        error: error.message || 'Failed to save user'
      })
    }
  })
}

export default function* rootSaga() {
  yield all([
    fork(someOtherSaga),
    fork(saveUsersRequest)
  ])
}


// import to root saga

import users from './users'

export default function* rootSaga() {
  yield all([
    // .... other sagas
    users()
  ])
}

在我的组件中,我调度动作,需要等待saveUsersRequest将完成(所有内部调用和动作也必须完成)。我试图将其包装在Promise中,例如:

// this component connected to Redux store
class MyComp extends Component {
    handleSaveClick = () => {
        Promise.resolve(this.props.saveUser(params)).then(() => {
        const { saveUserError } = this.props
        if (!saveUserError) {
          toggle()
        }
      })
    }

    render() {
        return <button onClick={this.handleSaveClick} />
    }
}

它不起作用,因为内部API调用在toggle()调用之后完成。您有任何解决办法的想法吗?

0 个答案:

没有答案