我在我的應用程序中使用了redux-persist和redux-observable,並注意到在存儲狀態恢復之前我的包含observable的API調用正在發生。並且恢復會使用過時的數據覆蓋提取的值。 在緩衝時如何暫停rootEpic,直到persist/REHYDRATE操作到達?暫停rootEpic直到持續完成
1
A
回答
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()
根史詩或東西:)
後討論在下面的評論:
這個問題可能同樣o與其他中間件一起發生。因此,這可能是一個更好的解決方案,直到重新水合完成之後纔開啓任何動作。
0
我對redux-persist並不熟悉,但它可能會或可能不重要,請注意您在中間件中傳遞的順序以減少重要性。一些中間件需要在別人之前或之後。如果這聽起來與你的問題有關,你可以嘗試交換它們。
+0
事實上,它與訂單無關,我也有同樣的問題,我試過他們兩個 –
相關問題
- 1. 暫停新的BackGroundWorker,直到完成前
- 2. 暫停mouseup/click直到$ .get完成
- 3. 如何暫停/停止功能,直到SOAP請求完成
- 4. 暫停哈希評估,直到初始ajax完成
- 5. JQuery:強制頁面暫停,直到數據完成加載
- 6. 暫停MDB消息處理,直到@StartupBean完成初始化
- 7. 如何讓函數暫停,直到NSTimer選擇器完成?
- 8. 暫停JavaScript數據庫查詢,直到setTimeout完成
- 9. 如何暫停JavaScript,直到完成任何事情?
- 10. 異步Python CGI調用暫停瀏覽器直到完成
- 11. 使一個函數等待/「暫停」直到另一個完成
- 12. 暫停的std ::線程,直到功能完成
- 13. 如何暫停父活動,直到兒童活動完成
- 14. QT:暫停功能流程,直到QWebView SIGNAL完成
- 15. 暫停的foreach循環,直到第一次迭代完成
- 16. 暫停PHP,直到事件/功能用JavaScript完成
- 17. 如何暫停onCreate直到引導完成?
- 18. android:暫停一個活動,直到另一個完成
- 19. 暫停Perl腳本,直到完成外部程序
- 20. 如何暫停程序,直到nsurlconnection完成?
- 21. XMLHttpRequest的暫停服務器響應直到AJAX完成
- 22. SimpleOnGestureListener,onDoubleTapEvent在一段時間後暫停,直到手勢完成
- 23. Facebook的股份數,暫停,直到回調函數完成
- 24. 暫停函數執行流程直到ajax請求完成
- 25. 暫停執行,直到批處理文件完成
- 26. 如何在selenium中暫停腳本,直到Autoit腳本完成?
- 27. 暫停,直到對象創建成功
- 28. MediaPlayer在暫停後完成
- 29. 停止線程直到其他完成
- 30. 如何暫停方法,直到條件爲真,然後繼續
在你的代碼中,所有的動作都會在'hydrated'被放棄之前發生。相反,他們應該被緩衝並在「水合」之後回覆到史詩中。 –
對不起,以爲這是你想要的:-x但是,在狀態恢復之前,你的應用程序不應該啓動任何操作嗎?看起來你會遇到與其他中間件相同的問題。 –
>>但是,在狀態恢復之前,您的應用程序不應該啓動任何操作嗎? 這將工作得很好。 我有以下archirecture,組件火災行動(例如FETCH_BACKGROUND)。 Epic攔截此動作,並向服務器發送請求以獲取後臺網址。在中間件從服務器獲得響應之後,它觸發FETCH_BACKGROUND_SUCCESS將後臺url設置爲狀態。 然而,在我的情況下,運行後的REHYDRATE去改寫新設置的狀態。 –