Helo, saya ada soalan: Dalam main.js, saya mempunyai fungsi global getSites
Fungsi ini berfungsi menggunakan async/menunggu dan mengembalikan data tapak secara tidak segerak.
Saya juga mempunyai pembolehubah global yang dipanggil lockSitesLoading
yang saya tetapkan kepada benar apabila saya mula mendapat data daripada API, saya memerlukan pembolehubah ini untuk menghalang pelanggan daripada membuat permintaan baharu kepada pelayan.
Dalam fungsi pertama getSites
, saya perlu menyemak pembolehubah ini lockSitesLoading
dan jika ia benar, mula memantaunya sehingga ia berubah kepada palsu. Pada ketika ini, saya ingin memanggil getSites
Masalahnya bermula sekarang kerana apabila saya mula menonton pembolehubah, fungsi tidak menunggu pembolehubah menjadi palsu, tetapi mengembalikan
Berikut ialah kod saya:
Component.vue:
async mounted() { biarkan vm = ini; tapak const = menunggu vm.getSites(); vm.sites = tapak.data },
main.js:
async getSites() { biarkan vm = ini; if (vm.$store.state.lockSitesLoading) { vm.$watch('$store.state.lockSitesLoading', () => vm.getSites()); } lain { kembalikan vm._getSitesOnline(); //Ini adalah fungsi yang sebenarnya mendapat data daripada pelayan }
Saya cuba menyelesaikannya dengan cara ini tetapi ia tidak berjaya. Ada idea?
Saya tidak tahu sama ada anda telah menyediakannya
lockSitesLoading = true
, dan saya tidak tahu di mana anda telah menyediakannya.Berikut ialah contoh yang berkesan.
Pada asasnya memerlukan janji untuk menunggu:
Sila ambil perhatian bahawa jika
lockSitesLoading
menyekat pelaksanaan atas sebab tertentu, ini akan menyebabkan kebocoran ingatan.Mungkin terdapat cara yang lebih bersih untuk mencapai ini menggunakan komposisi API dan VueUse.