Vue 2 のグローバル関数からオブザーバーを返す方法
P粉682987577
P粉682987577 2023-09-05 22:03:02
0
2
501
<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粉682987577
P粉682987577

全員に返信(2)
P粉788571316

lockSitesLoading = true を設定したかどうかも、どこで設定したかもわかりません。

これは実際の例です。

リーリー リーリー リーリー
いいねを押す +0
P粉063039990

基本的には待機する約束が必要です:

リーリー

何らかの理由で lockSitesLoading が実行をブロックすると、メモリ リークが発生することに注意してください。

これを実現するには、コンポジション API と VueUse コンポジションを使用するよりクリーンな方法があるかもしれません。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート