uni-app luch-request 插件拦截器响应error不执行

发布于 1周前 作者 yibo5220 来自 Uni-App

uni-app luch-request 插件拦截器响应error不执行

开发环境 版本号 项目创建方式
H5 HBuilderX 2.9.9+
APP HBuilderX 2.9.9+
微信小程序 2.10.0
支付宝小程序



```javascript
function useRequestIns(module) {  
    const http = new Request()  
    /* config 为默认全局配置*/  
    http.setConfig(config => {  
        config.baseURL = '域名'  
        config.header = { "Content-Type": "application/json" }  
        // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN  
        config.timeout = 20000 // H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序  
        // #endif  
        return config  
    })  
    // 请求前拦截  
    http.interceptors.request.use(useRequest, useRequestError)  
    // 请求成功后拦截  
    http.interceptors.response.use(useResponse, useResponseError)  
    return http  
}  

function useRequest(config) {  
    // 抛出一个错误,这将导致 error 函数被调用  
    throw new Error('测试请求前拦截 error 是否触发');  
}  

测试的时候,并没有触发 useRequestError 但是 触发了 useResponseError 不知道是不是作者故意这样,还是说这是个bug


1 回复

在使用 uni-appluch-request 插件时,如果拦截器中的 error 回调没有执行,可能是由于以下几个原因导致的。以下是一些可能的原因及解决方案:

1. 请求未触发错误

确保你的请求确实触发了错误。例如,如果请求成功,error 拦截器自然不会执行。你可以通过模拟一个错误的请求来测试 error 拦截器是否正常工作。

2. 拦截器未正确配置

确保你正确配置了拦截器。以下是一个基本的拦截器配置示例:

import Request from 'luch-request';

const http = new Request();

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    // 对响应数据做些什么
    return response;
  },
  (error) => {
    // 对响应错误做些什么
    return Promise.reject(error);
  }
);

export default http;

3. error 回调未正确处理

确保你在 error 回调中正确处理了错误,并且返回了 Promise.reject(error),否则后续的 catcherror 回调可能不会执行。

http.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    console.error('响应错误:', error);
    return Promise.reject(error);
  }
);

4. 请求未正确使用 catch

如果你在发起请求时没有使用 .catch()try-catch,那么 error 拦截器中的错误可能不会被捕获。确保你在请求中正确处理了错误:

http.get('/api/some-endpoint')
  .then((response) => {
    console.log('请求成功:', response);
  })
  .catch((error) => {
    console.error('请求失败:', error);
  });

5. 检查网络请求的状态码

有些错误可能是由于网络请求的状态码引起的,例如 404、500 等。确保你检查了这些状态码,并在 error 拦截器中正确处理它们。

http.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if (error.response) {
      // 服务器返回了错误状态码
      console.error('状态码:', error.response.status);
    } else if (error.request) {
      // 请求已发出,但没有收到响应
      console.error('请求未收到响应:', error.request);
    } else {
      // 其他错误
      console.error('错误:', error.message);
    }
    return Promise.reject(error);
  }
);
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!