2017-03-16 7 views
1

私はアプリケーションでredux-persistとredux-observableを使用しており、ストア状態が復元される前にobservableでラップされたAPI呼び出しが行われていることに気付きました。そして復元は古いデータでフェッチされた値をオーバーライドします。 persist/REHYDRATEアクションが到着するまで、バッファリング中にrootEpicを一時停止できますか?永続性が完了するまでrootEpicを一時停止します

答えて

0

「イベント」が発生するまで待つ場合は.skipUntilを使用できます。例えば:私は推測

const action$ = new Rx.Subject(); 
 

 
// In your epic 
 
action$ 
 
    .skipUntil(action$.filter(({ type }) => type === 'hydrated')) 
 
    .subscribe(x => console.log(x)); 
 

 
// "Rehydrate" 
 
action$.next({ type: 'hello!' }); 
 
action$.next({ type: 'hello?' }); 
 
action$.next({ type: 'any body there?' }); 
 
action$.next({ type: 'hydrated' }); 
 
action$.next({ type: 'do' }); 
 
action$.next({ type: 'you' }); 
 
action$.next({ type: 'see' }); 
 
action$.next({ type: 'me' }); 
 
action$.next({ type: 'now' });
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>

は、あなたの叙事詩のすべてにこれを追加しないために、あなたはあなたのルート叙事詩または:)


した後に何かを.mergeMap()ことができ以下のコメントの説明

この問題は、他のミドルウェアで発生する。したがって、再水和が行われるまで、いかなる行動も起こさない方が良い方法かもしれません。

+0

あなたのコードでは、すべてのアクションが 'ハイドレーティング済み'になる前に破棄されます。代わりに、彼らは緩衝され、 '水和'の後で叙事詩に返答されるべきです。 –

+0

申し訳ありませんが、これがあなたの望むものだと思っています:-xしかし、あなたのアプリは、状態が再水化されるまで、他のミドルウェアと同じ問題に遭遇するようです。 –

+0

>>しかし、あなたのアプリは、状態が再水化されるまでは、何の行動も起こしてはいけませんか? これも同様に機能します。 私は次の順路、コンポーネント起動アクション(e.i. FETCH_BACKGROUND)を持っています。 Epicはこのアクションを傍受し、バックグラウンドURLを取得する要求をサーバーに送信します。ミドルウェアがサーバーから応答を受け取ると、状態の背景URLを設定するFETCH_BACKGROUND_SUCCESSを起動します。 しかし、私の場合は、後に実行されるREHYDRATEは、新たに設定された状態を書き換えます。 –

0

私はredux-persistに精通していませんが、ミドルウェアで問題を解決するために渡す順序に注意することは重要な場合もあります。ミドルウェアの中には、他のミドルウェアの前後にあるものが必要です。これが問題に関連すると思われる場合は、問題を交換してみてください。

+0

実際には、それは注文に関連していない、私も同じ問題があり、私はそれらの両方を試みた –

関連する問題