Вопрос по асинхронному js?

Есть класс Lists

class Lists {

constructor (items, failMessage) {
        this.items = items;
        this.failMessage = failMessage;
    }

async requestToServer(url) {

        let response = await fetch(url, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json;charset=utf-8',
            });

        if (response.ok) this.items = await response.json();
        else if (response.status == 422) this.failMessage = await response.json();
    }

sendNewData() {
...

 ( async () => await this.requestToServer(url) )();

console.log( this.failMessage);

}

}


Проблема заключается в том, что интерпретатор js почему-то переходит к строке console.log( this.failMessage); , не дождавшись завершения выполнения в строке ( async () => await this.requestToServer(url) )();.

И в результате в консоль выводится значение свойства failMessage равное null даже когда статус ответа от сервера 422( что должно вывести текст ошибки. пересылаемый сервером).
Если же я перепишу строку console.log( this.failMessage); модифицировав ее Timeout - ом - то все прекрасно отрабатывает.
Подскажите пожалуйста, почему так?
  • Вопрос задан
  • 243 просмотра
Решения вопроса 2
Mike_Ro
@Mike_Ro Куратор тега JavaScript
Python, JS, WordPress, SEO, Bots, Adversting
async sendNewData() {
    await this.requestToServer(url);
    console.log(this.failMessage);
}

Весь исправленный код, втч. синтаксические ошибки:
class Lists {
    constructor(items, failMessage) {
        this.items = items;
        this.failMessage = failMessage;
    }

    async requestToServer(url) {
        let response = await fetch(url, {
            method: 'GET',
            headers: {
                'Content-Type': 'application/json;charset=utf-8',
            }
        });

        if (response.ok) {
            this.items = await response.json();
        } else if (response.status == 422) {
            this.failMessage = await response.json();
        }
    }

    async sendNewData(url) {
        await this.requestToServer(url);
        console.log(this.failMessage);
    }
}
Ответ написан
Комментировать
@risejs
Потому что await работает внутри функции async, а console.log у вас находится вне этой функции.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы