Dva異步的同步處理

dva action一般是異步的,但是業(yè)務(wù)有時需要同步處理,總結(jié)三種處理方式如下:

  1. 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' });
    }
  }

  1. 利用@@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');

  1. 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' });
    });

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容