Dva异步的同步处理

dva action一般是异步的,但是业务有时需要同步处理,总结三种处理方式如下:

  1. async处理函数
  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执行成功后,才会打印');
      this.props.dispatch({ type: 'app/loadSuccess' });

    } catch (err) {
      this.props.dispatch({ type: 'app/loadSuccess' });
    }
  }

  1. 利用@@end 实现put的同步执行

参考dva文档
先执行getCityRank,执行成功后,才会执行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

先执行getCityRank,执行成功后,才会执行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' });
    });

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。