Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用async和await在Cordova应用程序中顺序运行XMLHttpRequest_Javascript_Async Await_Xmlhttprequest - Fatal编程技术网

Javascript 使用async和await在Cordova应用程序中顺序运行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/await在XMLHttpRequest()上下文中是如何工作的。我可以编写带有回调的函数,并让它按照我期望的顺序工作,但当我使用以下命令时:

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