在 XHR 中,由于异步特性,导致变量在被赋值前被 return
,此时将导致返回值为空。
解决方案
将发送 XHR 的部分放在函数 xhrReq()
中,并使用 Promise
。在 onload
部分使用reslove()
将结果返回,在onerror
部分使用reject()
将失败结果返回。
function xhrReq() {
return new Promise(function(reslove, reject) {
//...
let req = new XMLHttpRequest();
req.onload = function () {
//...
reslove(return_text)
}
req.onerror = function(){
reject(req.statusText);
}
//req.send(...);
}
)
}
接着在需要调用的函数前使用async
,并在调用处加上await
。
async function main(){
//...
let ret = await xhrReq();
//..
}