찾다

 >  Q&A  >  본문

Vue 2의 전역 함수에서 관찰자를 반환하는 방법

<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>
P粉682987577P粉682987577445일 전498

모든 응답(2)나는 대답할 것이다

  • P粉788571316

    P粉7885713162023-09-06 19:21:54

    설정하셨는지 모르겠어요lockSitesLoading = true, 어디서 설정하셨는지 모르겠어요.

    다음은 실제 예시입니다.

    으아악 으아악 으아악

    회신하다
    0
  • P粉063039990

    P粉0630399902023-09-06 09:50:26

    기본적으로 기다리겠다는 약속이 필요합니다:

    으아악

    어떤 이유로 lockSitesLoading실행을 차단하면 메모리 누수가 발생하므로 주의하세요.

    컴포지션 API 및 VueUse 컴포지션을 사용하여 이를 달성하는 더 깔끔한 방법이 있을 수 있습니다.

    회신하다
    0
  • 취소회신하다