0

我在我的应用程序中对计算层进行排序时遇到问题。我正在使用 Akita 实体存储来管理状态,然后观察更改并通过可观察对象管道它们以生成 UI 状态。整体流程为:

EntityStore.selectAll()
  -> pluck A  \     /  combineLatest(A, B) -> map Q
  -> pluck B  |    |   combineLatest(A, C) -> map R
  -> pluck C  |-> -|   combineLatest(B, E) -> map S
     ...      |    |   ...
  -> pluck N  /     \  combineLatest(C, D) -> map Z

(假设 distinctUntilChanged 在每个运算符之后)。

如何确保在任何组合之前计算 A..N?理想情况下,所有这些都在一个宏周期中,因此 UI 不会更新部分结果。

我尝试添加asapScheduler为 combineLatest 的最后一个参数,但它似乎不起作用,在调用 combineLatest 之前更新了一些输入,而在触发更多调用之后更新了一些输入。

我还希望能够添加另一个级别的组合:

EntityStore.selectAll()
  -> pluck A  \     /  combineLatest(A, B) -> map Q   \     / combineLatest(Q, R) -> map W
  -> pluck B  |    |   combineLatest(A, C) -> map R   |    |  combineLatest(Q, S) -> map X
  -> pluck C  |-> -|   combineLatest(B, E) -> map S   |-> -|  combineLatest(S, T) -> map Y
     ...      |    |   ...                            |    |  ...                         
  -> pluck N  /     \  combineLatest(C, D) -> map U   /     \ combineLatest(R, U) -> map Z

如何确保 A..N 都在 Q..U 之前计算,同样,Q..U 在 W..Z 之前计算?

4

0 回答 0