Я пытаюсь загрузить ajax-данные при создании моего компонента, однако, кажется, что другие элементы, которые также загружаются через ajax в created()
, загружаются синхронно, а не асинхронно, когда выполняется следующее, этот запрос ajax занимает около 2 несколько секунд, чтобы запустить все после загрузки в синхронном стиле.
Загрузка следующего компонента из вызова ajax занимает около 2 секунд:
component1.vue
export default {
data: () => {
return { balance: { chips: 0, coins: 0, rewards: 0 } }
},
async created() {
this.balance = (await axios.get('/api/player/balance')).data
}
}
Этот компонент загружается из вызова ajax менее чем за секунду:
component2.vue
export default {
data: () => {
return { items: [] }
},
async created() {
this.items = (await axios.get('/api/items')).data
}
}
Оба должны загружаться асинхронно, но они этого не делают, /api/player/balance
запускается, затем /api/items
запускается.
Я также пытался использовать .then()
так же:
export default {
data: () => {
return { balance: { chips: 0, coins: 0, rewards: 0 } }
},
created() {
axios.get('/api/player/balance').then(function (response) {
this.balance = response.data
})
}
}
Когда я обертываю this.balance = ...
в setTimeout
, другие элементы загружаются нормально.
Есть ли лучший способ реализовать такой синхронный запрос ajax?
Редактировать
Использование fetch
решает проблему загрузки запросов синхронно и позволяет им загружаться асинхронно.
export default {
data: () => {
return { balance: { chips: 0, coins: 0, rewards: 0 } }
},
async created() {
let response = await fetch('/api/player/balance')
this.balance = await response.json()
}
}
Есть ли способ сделать это с axios
?