RemAvalon 2024-09-29 17:27 采纳率: 87.5%
浏览 4
已采纳

vue2 axios响应拦截器抛异常

img


第26行开始,想判断status状态码,错误(不是200)就抛出一个错误的promise,但是抛出的如右边所示,直接停止了运行,跟着教学视频里应该是控制台抛出不停止运行,并且会轻提示(messgae)
邦邦!

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-29 17:28
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你给出的代码和描述来看,你在axios响应拦截器中判断状态码并抛出错误,但遇到了“Cannot read properties of undefined”的错误。这个错误通常意味着你试图访问一个未定义对象的属性。在你的代码中,你试图访问response.data.messgae,这可能是问题所在。你需要确保response.data不是一个空对象或者未定义,然后再访问它的属性。你可以在抛出错误之前添加一些检查来避免这个问题。

    以下是一个改进的代码示例:

    instance.interceptors.response.use(function(response) {
      console.log(response.data.status);
      if (response.data && response.data.status !== 200) {
        Toast(response.data.messgae); // 确保你的Toast函数能够正确处理传入的数据
        return Promise.reject(response.data); // 注意这里传入的是整个响应数据,而不是messgae属性
      }
      return response; // 正常响应的处理逻辑
    }, function(error) {
      // 处理响应错误的逻辑
      console.log('Error occurred:', error);
      return Promise.reject(error); // 直接拒绝错误
    });
    

    这个代码段做了以下几个改动:

    1. 在访问response.data.messgae之前检查了response.data是否存在。这样可以避免尝试访问未定义对象的属性导致的错误。
    2. 在抛出错误时,传入的是整个响应数据而不是单独的messgae属性。根据你的代码逻辑,你可能需要整个响应数据来进行后续处理。如果你只需要错误信息,你可以调整这部分代码来满足你的需求。
    3. 在响应拦截器的第二个参数(错误处理函数)中直接返回了一个拒绝状态的Promise,这样你可以捕获并处理任何错误。这有助于你更好地管理和处理错误情况。

    请尝试这个修改后的代码,看看是否能解决你的问题。如果问题仍然存在或者有其他问题,请提供更多信息以便我能更准确地帮助你解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 今天
  • 创建了问题 9月29日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?