ios内嵌h5报错 unhandled promise rejecion typeError

发生条件:
  • vue + vuex
  • 低版本苹果系统10.3.2
  • 苹果内嵌vue H5页面
  • 通过eruda捕获错误unhandled promise rejecion typeError
发生原因:
  • 实现 axios loading效果
  • 代码如下
let requestNum = 0;
function startLoad(){
	if (requestNum === 0) {
        store.commit('showLoading')
    }
    requestNum++
}
function endLoad(){
	if (requestNum > 0) {
        requestNum--
    }
    if (requestNum === 0) {
        setTimeout(function() {
            store.commit('hideLoading')
        }, 200)
    }
}
const _axios = axios.create(config);

_axios.interceptors.request.use(function(config) {
	startLoad()
    var { userId = "", token = "", userType = "" } = store.state.querys
    config.url = config.url + `${config.url.indexOf("?")==-1?'?':'&'}userId=${userId}&token=${token}&userType=${userType}`
    // Do something before request is sent
    return config;
}, function(error) {
    // Do something with request error
    return Promise.reject(error);
});

// Add a response interceptor
_axios.interceptors.response.use(res => {
    endLoad()
    if (res.data.code && res.data.code != 200) {
        store.commit('showAlert', { msg: res.data.msg })
        return;
    }
    return res.data;
}, err => {
    endLoad()
    return Promise.reject(err);
});
解决办法:
let requestNum = 0;

let config = {
    // baseURL: process.env.baseURL || process.env.apiUrl || ""
    // timeout: 60 * 1000, // Timeout
    // withCredentials: true, // Check cross-site Access-Control
};

const _axios = axios.create(config);

_axios.interceptors.request.use(function(config) {
    if (requestNum === 0) {
        store.commit('showLoading')
    }
    requestNum++
    var { userId = "", token = "", userType = "" } = store.state.querys
    config.url = config.url + `${config.url.indexOf("?")==-1?'?':'&'}userId=${userId}&token=${token}&userType=${userType}`
    // Do something before request is sent
    return config;
}, function(error) {
    // Do something with request error
    return Promise.reject(error);
});

// Add a response interceptor
_axios.interceptors.response.use(res => {
    if (requestNum > 0) {
        requestNum--
    }
    if (requestNum === 0) {
        setTimeout(function() {
            store.commit('hideLoading')
        }, 200)
    }
    // Do something with response data
    if (res.data.code && res.data.code != 200) {
        store.commit('showAlert', { msg: res.data.msg })
        return;
    }
    return res.data;
}, err => {
    if (requestNum > 0) {
        requestNum--
    }
    if (requestNum === 0) {
        setTimeout(function() {
            store.commit('hideLoading')
        }, 200)
    }
    // Do something with response error
    if (err.response.data.code && err.response.data.code != 200) {
        store.commit('showAlert', { msg: res.data.msg })
    }
    return Promise.reject(err);
});

猜你喜欢

转载自blog.csdn.net/m0_37285193/article/details/103279533