Je trouve une solution à la méthode calculée asynchrone dans les composants:
Actuellement, mes composants sont:
<div class="msg_content">
{{messages}}
</div>
<script>
export default {
computed: {
messages: {
get () {
return api.get(`/users/${this.value.username}/message/`, {'headers': { 'Authorization': 'JWT ...' }})
.then(response => response.data)
}
}
},
}
</script>
Résultat: {}
Comment le réécrire en mode Promise
? Parce que je pense que nous pouvons calculer de manière asynchrone en écrivant en mode Promise.
Les propriétés calculées sont essentiellement des fonctions qui mettent en cache leurs résultats, de sorte qu'ils ne doivent pas être calculés chaque fois qu'ils sont nécessaires. Ils ont mis à jour automatiquement en fonction des valeurs réactives qu'ils utilisent .
Votre calcul n’utilise pas d’éléments réactifs, il n’ya donc aucun intérêt à ce qu’il soit calculé. Il retourne une promesse maintenant (en supposant le comportement habituel de then
).
Ce que vous souhaitez réaliser n’est pas tout à fait clair, mais j’imagine que vous devriez créer un élément de données contenant response.data
Et émettre votre appel api.get
Dans le created
hook . Quelque chose comme
export default {
data() {
return {
//...
messages: []
};
},
created() {
api.get(`/users/${this.value.username}/message/`, {
'headers': {
'Authorization': 'JWT ...'
}
})
.then(response => this.messages = response.data);
}
}
es7 rend cela très simple en utilisant async
et await
conjointement avec la promesse retournée par axios. Vous aurez besoin du paquet vue-async-computed .
export default {
asyncComputed: {
async myResolvedValue() {
return await api.get(`/users/${this.value.username}/message/`, {'headers': { 'Authorization': 'JWT ...' }})
.then(response => response.data)
}
}
}