我需要封装一个发送请求的方法,供别人使用,别人在调用我这个方法的地方,不能使用async 和 await 的方式,而是想直接获取返回值,如:
必须直接调用我提供的网络请求方法,获得返回值
//直接调用我提供的网络请求方法,获得返回值
var response = this.getPostData(url, data);
// 直接获取不到正确的数据
console.log(response);
我提供的网络请求方法是:
async getPostData(url, data) {
var response;
await this.http(url, data).then((res) => {
console.log("then中" + res);
response = res;
});
return response;
},
http(urlStr, dataStr) {
return new Promise((resolve, reject) => {
wx.request({
url: urlStr,
data: dataStr,
method: "POST",
success: res => {
console.log("wx.request success");
resolve(res)
},
fail: err => {
console.log("wx.request fail");
reject(err)
}
})
})
},
也就是说,直接调用的时候,执行顺序是
1、console.log(response);
2、发送请求
是否有办法发送同步网络请求?
本根本上说async、await就是发起的异步请求,只不过可以让写法变成是同步的,其本质还是异步。
所以微信小程序无法同浏览器上使用XMLHttpRequest发送同步请求
let dataStr = UTF8ToString(data); let request = new XMLHttpRequest(); request.open('POST', urlStr, false); request.setRequestHeader('content-type', 'application/json'); request.send(dataStr); if (request.status === 200) { console.log(request.responseText); } else { console.log(request.status); } let responseText = request.responseText;