Как во Vue2 с помощью axios без setTimeout() перехватить данные асинхронного запроса?

Вопросы по вёрстке и JavaScript
Ответить
EVOSandru6
Сообщения: 561
Зарегистрирован: 2014.07.04, 13:33

Как во Vue2 с помощью axios без setTimeout() перехватить данные асинхронного запроса?

Сообщение EVOSandru6 » 2018.04.02, 07:00

Добрый день,

Есть такая проблема. По http запросу вытаскиваю данные с сервера для первичной инициализации. Но возникает проблема во время выполнения - данные которые риходят в ответах не получается перехватить из за асинхронности таковых запросов.

Пример отражает мою проблему. Максимально упростил для понятности.

Код: Выделить всё

export default {

        data: function () {
            return {
                order: null,
            }
        },
        created() {

            this.initOrder();

            this.initOptions();
        },

        methods: {

            initOrder() {

                HTTP.get('/orders/id=' + this.$route.params.id).then((response) =>
                {

                    this.order = response.data;
                });
            },
            initOptions() {

                console.log(this.order); // return null

                // ...

                this.order.param = 'oops'; // exception cannot read property of null

                // ...

                setTimeout(() => {

                    console.log(this.order); // return expected object

                    this.order.param = 'oops'; // so good by setTimeout is cumbersome

                }, 1000);
            }
        },
    }

}

Интересует - как можно решить данную проблему в крайнем случаем убийством ассинхронности или еще как то по человечески.

zelenin
Сообщения: 10575
Зарегистрирован: 2013.04.20, 11:30

Re: Как во Vue2 с помощью axios без setTimeout() перехватить данные асинхронного запроса?

Сообщение zelenin » 2018.04.02, 11:09

сделай последовательно, если нужно последовательно)

EVOSandru6
Сообщения: 561
Зарегистрирован: 2014.07.04, 13:33

Re: Как во Vue2 с помощью axios без setTimeout() перехватить данные асинхронного запроса?

Сообщение EVOSandru6 » 2018.04.02, 12:19

zelenin писал(а):
2018.04.02, 11:09
сделай последовательно, если нужно последовательно)
Я бы с удовольствием, но даже async/await и asyncComputed не помогает в этом вопросе(

zelenin
Сообщения: 10575
Зарегистрирован: 2013.04.20, 11:30

Re: Как во Vue2 с помощью axios без setTimeout() перехватить данные асинхронного запроса?

Сообщение zelenin » 2018.04.02, 12:23

initOrder() {

return HTTP.get('/orders/id=' + this.$route.params.id).then((response) =>
{

this.order = response.data;
});
},

this.initOrder().then() => {
this.initOptions();
})


Ответить