dva action一般是異步的,但是業(yè)務(wù)有時需要同步處理,總結(jié)三種處理方式如下:
-
async處理函數(shù)
onSubmit = async (e) => {
let params = {
cityName: '',
cityId: '',
};
this.props.dispatch({ type: 'app/loadStart' });
try {
await this.props.dispatch({ type: 'editDivision/updateDivisionInfo', payload: params });
console.log('updateDivisionInfo執(zhí)行成功后,才會打印');
this.props.dispatch({ type: 'app/loadSuccess' });
} catch (err) {
this.props.dispatch({ type: 'app/loadSuccess' });
}
}
- 利用
@@end實(shí)現(xiàn)put的同步執(zhí)行
參考dva文檔
先執(zhí)行g(shù)etCityRank,執(zhí)行成功后,才會執(zhí)行updateInfo
yield put({ type: 'getCityRank', payload: { cityId: 'all', employeeNo: 'all', teamId: 'all' } });
yield take('getCityRank/@@end');
yield put({ type: 'updateInfo', payload: { cityId: 'all', employeeNo: 'all', teamId: 'all' } });
yield take('updateInfo/@@end');
promise.then
先執(zhí)行g(shù)etCityRank,執(zhí)行成功后,才會執(zhí)行updateInfo
this.props.dispatch({ type: 'app/loadStart' });
this.props.dispatch({ type: 'reportForm/getCityRank', payload: form }).then(() => {
this.props.dispatch({ type: 'reportForm/updateInfo', payload: form })
this.props.dispatch({ type: 'app/loadSuccess' });
}).catch(() => {
this.props.dispatch({ type: 'app/loadSuccess' });
});