Comment renvoyer un observateur d'une fonction globale dans Vue 2
P粉682987577
2023-09-05 22:03:02
<p>Bonjour, j'ai une question : Dans main.js, j'ai une fonction globale <code>getSites</code> </p><p>
Cette fonction fonctionne en utilisant async/await et renvoie les données du site de manière asynchrone. </p><p>
J'ai également une variable globale appelée <code>lockSitesLoading</code> 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. </p><p>
Dans la première fonction <code>getSites</code>, je dois vérifier cette variable <code>lockSitesLoading</code> et si elle est vraie, commencer à la surveiller jusqu'à ce qu'elle devienne false. À ce stade, je souhaite appeler <code>getSites</code> </p><p>
Le problème commence maintenant car lorsque je commence à regarder la variable, la fonction n'attend pas que la variable devienne fausse, mais renvoie <code>undefined</code>. </p><p>
Voici mon code : </p>
<p>Component.vue :</p>
<pre class="brush:php;toolbar:false;">monté async() {
soit vm = ceci ;
const sites = attendre vm.getSites();
vm.sites = sites.données
},</pré>
<p>main.js :</p>
<pre class="brush:php;toolbar:false;">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
}</pré>
<p>J'ai essayé de résoudre le problème de cette façon, mais cela ne fonctionne pas. Des idées? </p>
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.