I don't seem to understand how async/await work in the context of XMLHttpRequest(). I can write the function with callbacks and have it work in the order I expect, but when I use the following:
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();
}
and call inside an async function:
async function other(){
let dog = await asyncLoadPartial(el("mainContent"),partial);
alert(2);
}
I get the alert "2" before alert "1" when I expected to see 1 and then 2. I read How do I return the response from an asynchronous call? and can make the example with promise/then work, but I'd still like to learn async/await.
I always used callbacks with XMLHttpRequest until more recently I use fetch, but in Cordova, the fetch API doesn't seem to be supported for pulling local files because it gives the error
Fetch API cannot load file:///android_asset/www/path. URL scheme "file" is not supported.
I could just change xhr.open('GET', partial, true);
to xhr.open('GET', partial, false);
and run it synchronously, but it bothers me not to know what I did wrong above.
I can get async/await to work in other contexts, but not here. Why doesn't function other() wait before moving on to the alert?