关于axios 配置的原因 为什么then和catch 反过来了 then应该是回调成功的函数才对

发布于 2022-09-05 05:27:26 字数 2007 浏览 11 评论 0

axios.js相关配置

import axios from 'axios'
import qs from 'qs'

// axios 配置
axios.defaults.timeout = 5000;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
axios.defaults.baseURL = 'http://192.168.1.120:8080/arbmanager';

//POST传参序列化
axios.interceptors.request.use((config) => {
  if(config.method  === 'post'){
    config.data = qs.stringify(config.data);
  }
  return config;
},(error) =>{
 console.log('错误参数')
  return Promise.reject(error);
});

//返回状态判断
axios.interceptors.response.use((res) =>{
  if(!res.data.success){
    // _.toast(res.data.msg);
    return Promise.reject(res);
  }
  return res;
}, (error) => {
  console.log('错误')
  return Promise.reject(error);
});

export function fetch(url, params) {
  return new Promise((resolve, reject) => {
    axios.post(url, params)
      .then(response => {
        resolve(response.data);
      }, err => {
        reject(err);
      })
      .catch((error) => {
        reject(error)
      })
  })
}

export default {
  /**
   * 用户登录
   */
  Login(params) {
    return fetch('/logindo.htm', params)
  },

login.vue调用axios

loginBtn(){
            let data = {
              'loginName': this.email,
              'loginPwd': this.password
            }
            api.Login(data)
              .then(res => {
                 let newData= JSON.parse(pako.inflate(res.data, { to: 'string' 
                 }));
                 console.log(res)
                 console.log(newData)
                //这里then应该是回调成功之后的函数才对 上面的pako只是一个解密js的一个插件
              })
              .catch(error => {
              //但是现在是catch回调成功在做相应的操作了,比如说判断用户名正确与否这个应该是then里面做的事情才对
//                this.$router.push({path:'/home'})
//                let newData= JSON.parse(pako.inflate(error.data, { to: 'string' }));
//                console.log(newData)
              })

关于axios 配置的原因 为什么then和catch 反过来了 then应该是回调成功的函数才对

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

挽清梦 2022-09-12 05:27:26

原因出在这里的if判断字段问题,后台加密之后这个地方的值有点不一样少了一层操作 ,对应好字段即可

//返回状态判断
axios.interceptors.response.use((res) =>{
  if(!res.data.success){
    // _.toast(res.data.msg);
    return Promise.reject(res);
  }
  return res;
}, (error) => {
  console.log('错误')
  return Promise.reject(error);
});
一紙繁鸢 2022-09-12 05:27:26

恩,这个问题我也碰到了

//返回状态判断(添加响应拦截器)
axios.interceptors.response.use((res) =>{
  console.log(res) 
  //对响应数据做些事
  if(!res.data.success){
      // _.toast(res.data.msg);
    return Promise.reject('瓦特了!数据没有拿到...O(∩_∩)O~~');
  }
  return res;
}, (error) => {
  // _.toast("网络异常", 'fail');
  // console.log('err' + error)// for debug
  return Promise.reject(error);
});

控制台输出res的内容发现返回数据的格式如下:

clipboard.png

发现数据格式里根本就没有res.data.success所以在判断!res.data.success一直为true,所以我更改为如下方式:

if(res.status != 200){
      // _.toast(res.data.msg);
    return Promise.reject('瓦特了!数据没有拿到...O(∩_∩)O~~');
  }

然后就可以了

clipboard.png

梦中楼上月下 2022-09-12 05:27:26

老哥,解决了没,我的也是这样,怎么解决的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文