已经根据官方示例写了个response拦截器, 想判断如果是非200的响应码就直接弹窗提示不再return。 但是目前虽然已经实现非200响应码弹窗,但是业务函数还是会收到响应的json,这样我就不得不在业务中再去判断一次。 正确的姿势应该怎么操作。。
已经根据官方示例写了个response拦截器, 想判断如果是非200的响应码就直接弹窗提示不再return。 但是目前虽然已经实现非200响应码弹窗,但是业务函数还是会收到响应的json,这样我就不得不在业务中再去判断一次。 正确的姿势应该怎么操作。。
我没有用 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(() => {})
}
13 回答13k 阅读
8 回答2.8k 阅读
2 回答5.2k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
5 回答1.7k 阅读✓ 已解决
非200的时候返回一个错误,
throw new Error('服务器异常')
或者return Promise.reject('服务器异常')