Bonjour, j'ai une question : Dans main.js, j'ai une fonction globale getSites
Cette fonction fonctionne en utilisant async/await et renvoie les données du site de manière asynchrone.
J'ai également une variable globale appelée lockSitesLoading
que j'ai définie sur true lorsque je commence à obtenir des données de l'API. J'ai besoin de cette variable pour empêcher le client de faire de nouvelles requêtes au serveur.
Dans la première fonction getSites
, je dois vérifier cette variable lockSitesLoading
et si elle est vraie, commencer à la surveiller jusqu'à ce qu'elle devienne false. À ce stade, je souhaite appeler getSites
Le problème commence maintenant car lorsque je commence à regarder la variable, la fonction n'attend pas que la variable devienne fausse, mais renvoie undefined
.
Voici mon code :
Component.vue :
monté async() { soit vm = ceci ; const sites = attendre vm.getSites(); vm.sites = sites.données },main.js :
async getSites() { soit vm = ceci ; si (vm.$store.state.lockSitesLoading) { vm.$watch('$store.state.lockSitesLoading', () => vm.getSites()); } autre { return vm._getSitesOnline(); //C'est la fonction qui récupère réellement les données du serveur }J'ai essayé de résoudre le problème de cette façon, mais cela ne fonctionne pas. Des idées?
Je ne sais pas si vous l'avez configuré
lockSitesLoading = true
, et je ne sais pas où vous l'avez configuré.Voici un exemple fonctionnel.
Nécessite essentiellement une promesse d'attendre :
Veuillez noter que si
lockSitesLoading
bloque l'exécution pour une raison quelconque, cela entraînera une fuite de mémoire.Il existe peut-être un moyen plus propre d'y parvenir en utilisant l'API de composition et les compositions VueUse.