Redux 暂停rootEpic,直到持久完成

Redux 暂停rootEpic,直到持久完成,redux,rxjs,react-redux,rxjs5,redux-observable,Redux,Rxjs,React Redux,Rxjs5,Redux Observable,我在应用程序中使用了redux persist和redux observable,并注意到在恢复存储状态之前,使用observable包装的API调用正在发生。恢复会用过时的数据覆盖获取的值。 如何在缓冲期间暂停rootEpic,直到持久化/再水化操作到达?如果要等到“事件”发生,可以使用.skipUntil。例如: const action$=new Rx.Subject(); //在你的史诗中 行动$ .skipUntil(操作$.filter(({type}=>type==='hydra

我在应用程序中使用了redux persist和redux observable,并注意到在恢复存储状态之前,使用observable包装的API调用正在发生。恢复会用过时的数据覆盖获取的值。
如何在缓冲期间暂停rootEpic,直到持久化/再水化操作到达?

如果要等到“事件”发生,可以使用
.skipUntil
。例如:

const action$=new Rx.Subject();
//在你的史诗中
行动$
.skipUntil(操作$.filter(({type}=>type==='hydrated'))
.subscribe(x=>console.log(x));
//“补液”
动作$.next({type:'hello!'});
动作$.next({type:'hello?'});
action$.next({type:'anybody there?'});
动作$.next({type:'hydrated'});
动作$.next({type:'do'});
动作$.next({type:'you'});
动作$.next({type:'see'});
动作$.next({type:'me'});
动作$.next({type:'now'})

我不熟悉redux persist,但需要注意的是,将中间件传递给redux的顺序可能很重要,也可能不重要。一些中间件需要在其他中间件之前或之后。如果这听起来与您的问题相关,您可以尝试交换它们。

在您的代码中,所有操作都是在“水合”被丢弃之前进行的。相反,它们应该被缓冲,并在“水合”后返回到史诗中。对不起,我认为这是你想要的:-x,但你的应用程序不应该在状态被水合之前不启动任何操作吗?似乎您在使用其他中间件时也会遇到同样的问题。>>但您的应用程序不应该在状态重新水化之前不启动任何操作吗?那也行。我有以下架构,组件激发动作(例如,获取背景)。Epic拦截此操作并向服务器发送请求以获取后台url。中间件从服务器获得响应后,启动FETCH_BACKGROUND_SUCCESS,将后台url设置为状态。然而,在我的例子中,在goes之后运行的REHYDRATE会重写新设置的状态。经过一些思考,我认为您是对的,最好在组件级别处理缓存。所以我打算这样做。请编辑您的解决方案,以便我将其标记为正确答案。谢谢你的帮助。事实上,这与订单无关,我也有同样的问题,我两个都试过了