4***@qq.com
4***@qq.com
  • 发布:2020-12-03 19:11
  • 更新:2020-12-03 21:41
  • 阅读:916

#插件讨论# 【 luch-request[quanzhan.co] - luch 】interceptors.response 的使用问题

分类:uni-app
http.interceptors.response.use((response) => { /* 请求之后拦截器。可以使用async await 做异步操作  */  
  // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject()  
  //   return Promise.reject(response)  
  // }  
  console.log(1)  
  console.log(response)  
  let data = response.data;  
  if(data.state == 'fail'){  //业务上的错误  
          //全局的处理,比如提示后面返回的error massage  
      return;     
  }  
  return response  
}, (response) => { // 请求错误做点什么。可以使用async await 做异步操作  
  console.log(2)  
  console.log(response)  
  uni.showToast({  
    title:"好像哪里出错了",  
    icon:"none"  
  })  
  return Promise.reject(response)  
})
http.get('/test?e=1',{params:{'b':2,'c':3}}).then(res =>{  
                    console.log("getInfo==========");  
                    console.log(res.data);  
                })

如上代码 response拦截器判断response.data.state == fail 后 如何 让下面http.get()的then部分不执行, 就说在接到业务上的错误后 做个全局的处理 不要再走http.get().的then了

求指教,万分感谢

2020-12-03 19:11 负责人:无 分享
已邀请:
luch

luch

不走then就让它走catch。
<br>
上边那块注释代码已经说明了。
<br>
把return 改成

return Promise.reject(response)
  • 4***@qq.com (作者)

    不想return Promise.reject(response) 这里就是当返回业务上的错误时 想做个统一的处理,比如弹窗提示后台返回的error msg,然后就结束了, get的then和catch都没有必要走了,有没有什么办法

    2020-12-03 21:42

  • luch

    回复 4***@qq.com: 没有办法。Promise有三种状态,分别是:Pending (进行中), Resolved (已完成), Rejected (已失败)。他必须有一个结果。

    2020-12-03 23:39

  • 4***@qq.com (作者)

    回复 luch: 可不可以直接在 response拦截器里把状态改成已完成呢 不走后面 的

    2020-12-03 23:40

  • luch

    你可以把拦截器理解成promise的内部。return res就是调用reslove。return promise.reject 就是调用reject。最后这个promise就在局部api响应then或者catch

    2020-12-03 23:45

  • luch

    你可以把http.get再包一个promise分装一个函数。然后用这个函数。错误的时候不要调用reslove或者reject。但是这样违背原则。有点憨

    2020-12-03 23:49

  • 4***@qq.com (作者)

    回复 luch:额 谢谢解答

    2020-12-04 00:02

该问题目前已经被锁定, 无法添加新回复