Javascript 使用async和await在Cordova应用程序中顺序运行XMLHttpRequest
我似乎不明白async/await在XMLHttpRequest()上下文中是如何工作的。我可以编写带有回调的函数,并让它按照我期望的顺序工作,但当我使用以下命令时:Javascript 使用async和await在Cordova应用程序中顺序运行XMLHttpRequest,javascript,async-await,xmlhttprequest,Javascript,Async Await,Xmlhttprequest,我似乎不明白async/await在XMLHttpRequest()上下文中是如何工作的。我可以编写带有回调的函数,并让它按照我期望的顺序工作,但当我使用以下命令时: async function asyncLoadPartial(targetElementHandle,partial) { var xhr= new XMLHttpRequest(); xhr.open('GET', partial, true); xhr.onreadystate
async function asyncLoadPartial(targetElementHandle,partial) {
var xhr= new XMLHttpRequest();
xhr.open('GET', partial, true);
xhr.onreadystatechange = function(){
if(this.readyState!==4){
return false;
}
if(this.status!==200){
return false;
}
//update the targetted element
targetElementHandle.innerHTML= this.responseText;
alert(1);
return true;
};
xhr.send();
}
并在异步函数内调用:
async function other(){
let dog = await asyncLoadPartial(el("mainContent"),partial);
alert(2);
}
当我希望看到1然后看到2时,我在警报“1”之前收到警报“2”。我读过,可以用promise/then来制作示例,但我仍然想学习async/await
我一直使用XMLHttpRequest的回调,直到最近我才使用fetch,但在Cordova中,fetch API似乎不支持提取本地文件,因为它给出了错误
获取API无法加载file:///android_asset/www/path. URL方案
不支持“文件”
我可以改变xhr.open('GET',partial,true)代码>到xhr.open('GET',partial,false)
并同步运行,但我不知道上面我做错了什么,这让我很烦恼
我可以让async/Wait在其他上下文中工作,但在这里不行。为什么函数other()在进入警报之前不等待?这是正常的行为,因为XMLHttpRequest是不可等待的,所以如果您注意到异步方法内部没有关键字wait
,那么该方法将立即运行,警报(2)
将在警报(1)
之前发生,因为只有在调用回调时才会出现警报(1)。因此,在此上下文中使用async和Wait是多余的。如果不能使用fetchapi,请坚持使用旧的回调aproach