美文网首页程序员让前端飞
umi项目中dva effects异常统一处理

umi项目中dva effects异常统一处理

作者: 大神带我来搬砖 | 来源:发表于2018-12-29 14:31 被阅读9次

    在前端项目中使用了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);
        },
      }
    };
    

    相关文章

      网友评论

        本文标题:umi项目中dva effects异常统一处理

        本文链接:https://www.haomeiwen.com/subject/sboulqtx.html