我在我的应用程序中使用了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. 如何暂停/停止功能,直到SOAP请求完成
- 2. JQuery:强制页面暂停,直到数据完成加载
- 3. QT:暂停功能流程,直到QWebView SIGNAL完成
- 4. 暂停函数执行流程直到ajax请求完成
- 5. 如何暂停JavaScript,直到完成任何事情?
- 6. 暂停哈希评估,直到初始ajax完成
- 7. SimpleOnGestureListener,onDoubleTapEvent在一段时间后暂停,直到手势完成
- 8. 暂停执行,直到批处理文件完成
- 9. 异步Python CGI调用暂停浏览器直到完成
- 10. android:暂停一个活动,直到另一个完成
- 11. 如何在selenium中暂停脚本,直到Autoit脚本完成?
- 12. 暂停,直到对象创建成功
- 13. MediaPlayer在暂停后完成
- 14. 停止线程直到其他完成
- 15. 如何暂停方法,直到条件为真,然后继续
- 16. 如何暂停Runnable直到另一个相同类型的任务完成?
- 17. 如何让一个节点http请求暂停执行直到完成
- 18. 暂停主游戏线程,直到一个活动开始,并完成 - Android
- 19. 如何暂停的JavaScript,直到jQuery的淡入淡出的执行完成
- 20. C#程序 - 暂停或睡眠完成
- 21. 复制完成后xcopy是否暂停?
- 22. 暂停/等待* .bat完成VB.net
- 23. 如何暂停/继续NSThread
- 24. WPF动画暂停/继续
- 25. Scrapyd暂停/继续工作
- 26. C:需要暂停过程,直到SIGALRM
- 27. Linux - 暂停循环,直到按下键
- 28. 暂停执行,直到Websocket连接
- 29. 暂停,直到CLLocation不为零
- 30. 暂停TimerTask直到下一次执行
在你的代码中,所有的动作都会在'hydrated'被放弃之前发生。相反,他们应该被缓冲并在“水合”之后回复到史诗中。 –
对不起,以为这是你想要的:-x但是,在状态恢复之前,你的应用程序不应该启动任何操作吗?看起来你会遇到与其他中间件相同的问题。 –
>>但是,在状态恢复之前,您的应用程序不应该启动任何操作吗? 这将工作得很好。 我有以下archirecture,组件火灾行动(例如FETCH_BACKGROUND)。 Epic拦截此动作,并向服务器发送请求以获取后台网址。在中间件从服务器获得响应之后,它触发FETCH_BACKGROUND_SUCCESS将后台url设置为状态。 然而,在我的情况下,运行后的REHYDRATE去改写新设置的状态。 –