1

我在我的应用程序中使用 redux-persist 和 redux-observable 并注意到我的 API 调用包裹在 observable 中是在存储状态恢复之前发生的。并且恢复会使用陈旧的数据覆盖获取的值。如何在缓冲时暂停 rootEpic,直到persist/REHYDRATE 操作到达?

4

2 回答 2

1

如果您想等到“事件”发生,您可以使用.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()您的根史诗或其他东西:)


在下面的评论中讨论后

其他中间件也可能出现此问题。因此,在补水完成之前不执行任何操作可能是一个更好的解决方案。

于 2017-03-16T14:52:23.003 回答
0

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

于 2017-03-16T18:11:05.950 回答