Vue 2의 전역 함수에서 관찰자를 반환하는 방법
P粉682987577
2023-09-05 22:03:02
<p>안녕하세요, 질문이 있습니다. main.js에는 API에서 사이트 목록을 검색하는 전역 함수 <code>getSites</code>가 있습니다. </p><p>
이 함수는 async/await를 사용하여 작동하며 사이트 데이터를 비동기적으로 반환합니다. </p><p>
또한 API에서 데이터를 가져오기 시작할 때 true로 설정한 <code>lockSitesLoading</code>라는 전역 변수가 있습니다. 클라이언트가 서버에 새 요청을 보내는 것을 방지하려면 이 변수가 필요합니다. </p><p>
첫 번째 함수 <code>getSites</code>에서 이 변수 <code>lockSitesLoading</code>를 확인해야 하며, 이것이 true이면 false로 바뀔 때까지 모니터링을 시작합니다. 이 시점에서 <code>getSites</code>를 재귀적으로 호출하고 싶습니다. </p><p>
이제 문제가 시작됩니다. 변수를 관찰하기 시작하면 함수가 변수가 false가 될 때까지 기다리지 않고 <code>정의되지 않은</code>을 반환하기 때문입니다. </p><p>
내 코드는 다음과 같습니다. </p>
<p>Component.vue:</p>
<pre class="brush:php;toolbar:false;">async 마운트() {
vm = 이것을 하자;
const 사이트 = vm.getSites()를 기다립니다;
vm.sites = 사이트.데이터
},</pre>
<p>main.js:</p>
<pre class="brush:php;toolbar:false;">async getSites() {
vm = 이것을 하자;
if (vm.$store.state.lockSitesLoading) {
vm.$watch('$store.state.lockSitesLoading', () => vm.getSites());
} 또 다른 {
vm._getSitesOnline()을 반환합니다.
//실제로 서버에서 데이터를 가져오는 함수입니다.
}</pre>
<p>이 방법으로 해결해 보았으나 해결되지 않았습니다. 어떤 아이디어가 있나요? </p>
설정하셨는지 모르겠어요
lockSitesLoading = true
, 어디서 설정하셨는지 모르겠어요.다음은 실제 예시입니다.
기본적으로 기다리겠다는 약속이 필요합니다:
으아악어떤 이유로
lockSitesLoading
실행을 차단하면 메모리 누수가 발생하므로 주의하세요.컴포지션 API 및 VueUse 컴포지션을 사용하여 이를 달성하는 더 깔끔한 방법이 있을 수 있습니다.