Интересно, где поставить жизненный цикл в ожидании результата обещания. Имеется пригодный для запуска образец: https://codesandbox.io/s/focused-surf-migyw. Я создаю Promise
в created()
и жду результата в async mounted()
. Правильно ли это и оптимально ли использовать Vue жизненный цикл компонента?
PS Я не хочу сохранять результат как мутацию в хранилище, потому что я могу вызывать этот метод несколько раз. Поэтому я возвращаю Promise
. Он загружает подробности пользователя из конечной точки REST.
store. js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
actions: {
FETCH_PROFILE: async context => {
const profile = { name: "Leos" };
return new Promise(function(resolve, reject) {
window.setTimeout(function() {
resolve(profile);
}, 2000);
});
}
}
});
component. vue
<template>
<div class="hello">
<p>Name = {{this.userProfile.name}}</p>
</div>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
userProfile: null,
profilePromise: null
}),
created() {
this.profilePromise = this.$store.dispatch("FETCH_PROFILE");
console.log(`my profile: ${this.userProfile}`);
},
async mounted() {
const response = await this.profilePromise;
console.log(response);
this.userProfile = response;
}
};
</script>