umi-dva中effects里使用yield call/put当请求Promise接口报错时

如果yield call的是一个Promise对象,那只有在Promise返回的是resolve方法的情况下,下面跟着的yield put及后面的代码才会执行,若返回了rejector则后面的代码则全部停止执行。

// models/mdeical.ts文件:
* fetchMedicalLast({ payload }, { call, put }) {
   
   const { medicalIndexList } = yield call(api.medical.fetchMedicalLast, payload);
   yield put({
     type: 'saveMedicalLast',
       payload: medicalIndexList,
  });
},

// tsx文件使用
dispatch({
  type: 'medical/fetchMedicalLast',
  payload: { sid },
});

如上使用,当接口请求成功,不会出现问题。但当接口出现报错,yield就不会往下执行了。并且再次dispatch也无效。所以我们需要用try catch包裹 yield语句

effects: {
    * fetchMedicalLast({ payload }, { call, put }) {
      try {
        const { medicalIndexList } = yield call(api.medical.fetchMedicalLast, payload);
        yield put({
          type: 'saveMedicalLast',
          payload: medicalIndexList,
        });
      } catch (err) {
        console.log('接口请求失败', err);
      }
    },
  },

 

你可能感兴趣的:(react)