Кажется, я не понимаю, как работает 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);
}
Iполучить предупреждение «2» перед предупреждением «1», когда я ожидал увидеть 1, а затем 2. Я прочитал Как я могу вернуть ответ от асинхронного вызова? и могу сделать пример с обещанием / тогда сработает, но я все еще хотел бы изучить async / await.
Я всегда использовал обратные вызовы с XMLHttpRequest, пока совсем недавно не использовал fetch, но в Cordova API извлечения, похоже, не поддерживается для извлечения локальных файловпотому что он выдает ошибку
Fetch API не может загрузить файл: /// android_asset / www / path. Схема URL "file" не поддерживается.
Я мог бы просто изменить xhr.open('GET', partial, true);
на xhr.open('GET', partial, false);
и запустить его синхронно, но меня беспокоит, что я не знаю, что я сделал выше.
Я могу заставить работать асинхронно / ожидать в других контекстах, но не здесь. Почему функция other () не ждет, прежде чем перейти к предупреждению?