So geben Sie einen Beobachter von einer globalen Funktion in Vue 2 zurück
P粉682987577
2023-09-05 22:03:02
<p>Hallo, ich habe eine Frage: In main.js habe ich eine globale Funktion <code>getSites</code>, die die Liste der Websites von der API abruft. </p><p>
Diese Funktion verwendet async/await und gibt Site-Daten asynchron zurück. </p><p>
Ich habe auch eine globale Variable namens <code>lockSitesLoading</code>, die ich auf true setze, wenn ich anfange, Daten von der API abzurufen. Ich benötige diese Variable, um zu verhindern, dass der Client neue Anfragen an den Server stellt. </p><p>
In der ersten Funktion <code>getSites</code> muss ich diese Variable <code>lockSitesLoading</code> überprüfen und, wenn sie wahr ist, mit der Überwachung beginnen, bis sie sich in falsch ändert. An dieser Stelle möchte ich <code>getSites</code> rekursiv aufrufen. </p><p>
Das Problem beginnt jetzt, denn wenn ich anfange, die Variable zu beobachten, wartet die Funktion nicht darauf, dass die Variable falsch wird, sondern gibt <code>undefiniert</code> zurück. </p><p>
Hier ist mein Code: </p>
<p>Component.vue:</p>
<pre class="brush:php;toolbar:false;">async mount() {
let vm = this;
const sites = waiting vm.getSites();
vm.sites = sites.data
},</pre>
<p>main.js:</p>
<pre class="brush:php;toolbar:false;">async getSites() {
let vm = this;
if (vm.$store.state.lockSitesLoading) {
vm.$watch('$store.state.lockSitesLoading', () => vm.getSites());
} anders {
return vm._getSitesOnline();
//Dies ist die Funktion, die tatsächlich die Daten vom Server erhält
}</pre>
<p>Ich habe versucht, es auf diese Weise zu lösen, aber es funktioniert nicht. Irgendwelche Ideen? </p>
不清楚你是否设置了
lockSitesLoading = true
,也不清楚你在哪里设置了。这是一个可工作的示例。
基本上需要一个等待的承诺:
请注意,如果
lockSitesLoading
由于某种原因阻止执行,这将导致内存泄漏。使用组合API和VueUse组合式可能有更简洁的方法来实现这一点。