发生条件:
- vue + vuex
- 低版本苹果系统10.3.2
- 苹果内嵌
vue H5
页面
- 通过
eruda
捕获错误unhandled promise rejecion typeError
发生原因:
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);
});