- 自定义的全局Http对象,专门来发异步请求。调用时执行
reject
操作报错:Uncaught (in promise) undefined
。 - catch代码段,不论执行
reject
还是return Promise.reject();
都是Uncaught (in promise)
报错信息如下:
请求响应如下:
关键代码如下:
http.js
/**
* ------------------------------------------------------------------
* 异步请求对象
* ------------------------------------------------------------------
*/
import Const from './const'
import App from '../main'
import Common from './common'
class Http {
constructor() {
this.xmlhttp = new XMLHttpRequest();
}
post(url, data) {
let params = [];
for (let key in data) {
params[params.length] = encodeURIComponent(key) + "=" + encodeURIComponent(data[key])
}
let postData = params.join('&').replace(/%20/g, "+");
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('post', url, true);
xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
//监听HTTP状态
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && (xhr.status < 300 || xhr.status === 304)) {
try {
let resp = JSON.parse(xhr.responseText);
if (resp.code == 200) {
if (resp.code == 401 || resp.code == 302) {
if (resp.data === Const.NONE_USER) {
//跳转到未授权页面
} else if (resp.data === Const.UNKNOWN_USER){
//警告框,并关闭窗口
}
reject(resp);
}
resolve(resp);
} else {
Common.toast('请求失败',Const.TOAST_ERROR)
reject(resp);
}
} catch (error) {
reject(error);
console.error('解析响应出错!'+error);
}
} else {
return Promise.reject(`ajax fail:${xhr.status}`);
}
}
};
//HTTP异常处理
xhr.onerror = () => {
reject({
status: this.status,
statusText: xhr.statusText
})
}
xhr.send(postData);
});
}
}
let http = new Http();
export default http;
-
service.js
(专门封装业务请求)
import Http from '../utils/http'
/**
* 微信jssdk对象初始化
*/
let wxInit = function() {
return new Promise(function (resolve, reject) {
Http.post(APIs.GET_WX_SIGNATURE, {
'url': window.location.href
}).then(function (res) {
try {
//获取相关参数
let appId = res.data.appId;
let timestamp = res.data.timestamp;
let nonceStr = res.data.nonceStr;
let signature = res.data.signature;
AppGlobal.userInfo = {
debug: Const.WX_DEBUG,
appId: appId,
timestamp: timestamp,
nonceStr: nonceStr,
signature: signature,
jsApiList: Const.WX_API_LIST
}
//调用微信jssdk对象进行配置
wx.config(AppGlobal.userInfo);
wx.error(function () {
//return Promise.reject();
reject();
})
} catch (e) {
//return Promise.reject();
reject();
}
resolve();
}).catch(function (res) {
//return Promise.reject(res);
reject();
});
})
}
看你这个信息,是在返回json之后的调用地方出错了。可惜你截图正好没截取到