umi请求拦截器怎样才能不返回response的数据?

image.png
已经根据官方示例写了个response拦截器, 想判断如果是非200的响应码就直接弹窗提示不再return。 但是目前虽然已经实现非200响应码弹窗,但是业务函数还是会收到响应的json,这样我就不得不在业务中再去判断一次。 正确的姿势应该怎么操作。。

阅读 2.8k
2 个回答

非200的时候返回一个错误,throw new Error('服务器异常')或者return Promise.reject('服务器异常')

我没有用 uni-app 自己的拦截器,而是用的 uView 封装的HTTP请求插件,不过思路都是一样的。

// request.js
// 响应拦截
uni.$u.http.interceptors.response.use((response) => { 
  const { data, config } = response
  ...
  if (data.code !== 200) return onError(vm, response)
  return data || {}
})
...
// 异常处理
const onError = function (vm, error) {x
  const { data, config } = error
  ...
  // 单独处理 401 错误
  if (data.code === 401) {
    uni.showModal({
      title: vm.$t("modal.title.system"),
      content: data.msg || vm.$t("system.error." + data.code),
      showCancel: false,
      success() {
        vm.$store.dispatch('user/logOut').finally(() => {
          uni.reLaunch({
            url: "/pages/enter/login/login"
          })
        })
      }
    })
  }
  // 如果没有显式定义 custom 的 toast 参数为 false 的话,默认对报错进行 toast 弹出提示
  if (custom?.toast !== false) {
    uni.$u.toast(errorCode[data.code] || data.msg || errorCode['default'])
  }
  ...
  // 默认返回一个 pending 中的 promise,请求不会进入 catch 中
  return new Promise(() => {})
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题