Не срабатывает await

Бек на Django, а фронт на чистом JS/HTML/CSS. Ничего, кроме font awesome не используется.

Для тестов перезапускую полностью сервер и делаю Ctrl+Shift+R что бы сбросить кеш статических файлов.

Есть вот такой код метода init

init() {
    document.addEventListener("DOMContentLoaded", async (event) => {
        console.log(`UserOffice init`);
        this.profile = await base.getProfile();
        console.log(`UserOfficeProfile is ${this.profile}`);
        ...
    });
}

Код метода getProfile

async getProfile() {
    const profile = await this.getXHRasync(`${window.location.origin}/api/get_profile/`)[0];
    console.log(`getProfile got ${profile}`)
    return profile;
}

И код метода getXHRasync

getXHRasync(path) {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest();
        xhr.open('GET', path, true);
        xhr.onload = function () {
            console.log(`GET XHR 2, path is ${path}, and response ${xhr.responseText}`);
            resolve(JSON.parse(xhr.responseText));
        };
        xhr.send();
    });
}

Я не спец в JS, просто нужно было провести рефактор. Насколько я понял await должен подождать значение и только потом продолжить выполнение кода.

Но на выхлопе получаю.

Вроде везде async/await проставил, может, я чего-то не знаю, поправьте

лог консоли


Ответы (1 шт):

Автор решения: Dimabytes

Попробуй в коде getProfile сначала дождаться выполнения async, а потом брать что то по индексу, а то получается, что ты берешь значение по индексу от промиса.

async getProfile() {
    const profile = (await this.getXHRasync(`${window.location.origin}/api/get_profile/`))[0];
    console.log(`getProfile got ${profile}`)
    return profile;
}
→ Ссылка