如何等待传奇完成并执行其他一些代码之后。 我有这样的传奇:
//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()调用之后完成。您有任何解决办法的想法吗?