Redux Saga: ожидание саги полностью завершено - PullRequest
0 голосов
/ 18 декабря 2018

Как дождаться полной саги и после выполнения какого-то другого кода.У меня есть сага, такая как это:

//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 ().У вас есть идеи как это исправить?

...