Вопрос по асинхронному 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 у вас находится вне этой функции.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект