Как сделать функцию асинхронной? Vue.js

У меня есть функция changeData, которую пользователь может запустить по кнопке ещё до того, как оба промиса вернут ответы. В случае этого в основную БД запишется пустой массив.

Как мне переписать код так, чтобы this.database = this.smallData срабатывал только после того, как fetch вернёт ответ?

methods: {
    changeData(how) {
        switch (how) {
            case 'small':
                this.database = this.smallData
                break
            case 'big':
                this.database = this.bigData
                break
        }
    },
    getSmallData() {
        return fetch(this.smallDataAPI)
        .then(d => d.json())
        .then(d => this.smallData = d)
    },
    getBigData() {
        return fetch(this.bigDataAPI)
        .then(d => d.json())
        .then(d => this.bigData = d)
    },
},
create() {
    this.getSmallData()
    this.getBigData()
}

Мне нужно, чтобы базы данных загружались с момента загрузки страницы, и, даже если пользователь и нажмёт кнопку, вызывающую changeData, то эта функция не срабатывала, пока нужная БД не загрузится


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

Автор решения: Жека Диулин

В таком случае можно добавить переменную loading, которая сбросится в false, когда твои fetch-методы получат ответ.

В changeData() ставишь проверку на loading. Можно даже кнопку отключить, если loading.

→ Ссылка