Как дождаться полной саги и после выполнения какого-то другого кода.У меня есть сага, такая как это:
//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 ().У вас есть идеи как это исправить?