umiプロジェクトにおけるdva effects異常統一処理

1203 ワード

フロントエンドプロジェクトではAnt Designを使用し,このフレームワークではdva,umi,redux-sagaを使用した.バックグラウンドとのインタラクションではeffectsを使用する必要があります.たとえば、
    *fetchColumns(_, { call, put }) {
      const data = yield call(fetchColumns);
      yield put({
        type: 'saveColumns',
        payload: data,
      });
    },
    *fetchSessionColumns(_, { call, put }) {
      const data = yield call(fetchSessionColumns);
      yield put({
        type: 'saveSessionColumns',
        payload: data,
      });
    },

バックグラウンドサーバが500エラーを返すと、call Effectが例外を放出し、generatorが停止します.解決策はtry catch、例えば
    *fetchColumns(_, { call, put }) {
      try{
        const data = yield call(fetchColumns);
        yield put({
          type: 'saveColumns',
          payload: data,
        });
      }catch (e) {
        onError(e)
      }
    }

ただし,これでは呼び出しのたびにtry catchが必要となるため,例外処理を統一する必要がある.Ant Designパッケージはumi,umiパッケージはdva,dvaパッケージはredux-sagaである.統合例外処理はumiで行うことができる.公式文書では以下のように説明されています.
srcディレクトリの下にapp.jsを新規作成します.内容は次のとおりです.
export const dva = {
  config: {
    onError(e) {
      e.preventDefault();
      console.error(e.message);
    },
  }
};