ホームページ  >  に質問  >  本文

Vue 2 のグローバル関数からオブザーバーを返す方法

<p>こんにちは、質問があります。main.js には、API からサイトのリストを取得するグローバル関数 <code>getSites</code> があります。 </p><p> この関数は async/await を使用して動作し、サイト データを非同期で返します。 </p><p> また、<code>lockSitesLoading</code> というグローバル変数もあり、API からデータの取得を開始するときに true に設定します。クライアントがサーバーに新しいリクエストを行うのを防ぐためにこの変数が必要です。 </p><p> 最初の関数 <code>getSites</code> では、この変数 <code>lockSitesLoading</code> をチェックする必要があります。それが true の場合は、false に変わるまで監視を開始します。この時点で、<code>getSites</code> を再帰的に呼び出したいと思います。 </p><p> 変数の監視を開始すると、関数は変数が false になるのを待たずに、<code>unknown</code> を返すため、問題はここから始まります。 </p><p> これが私のコードです: </p> <p>Component.vue:</p> <pre class="brush:php;toolbar:false;">async mount() { vm = this; とします。 const sites = await vm.getSites(); vm.sites = サイト.データ },</pre> <p>main.js:</p> <pre class="brush:php;toolbar:false;">async getSites() { vm = this; とします。 if (vm.$store.state.lockSitesLoading) { vm.$watch('$store.state.lockSitesLoading', () => vm.getSites()); } それ以外 { return vm._getSitesOnline(); //実際にサーバーからデータを取得する関数です }</pre> <p>この方法で解決しようとしましたが、うまくいきません。何か案は? </p>
P粉682987577P粉682987577409日前462

全員に返信(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
  • キャンセル返事