Последовательность наблюдаемых с помощью планировщиков - PullRequest
0 голосов
/ 05 августа 2020

У меня проблемы с последовательностью вычислений в моем приложении. Я использую хранилище сущностей Akita для управления состоянием, а затем наблюдаю за изменениями и пропускаю их через наблюдаемые объекты для генерации состояния пользовательского интерфейса. Общий поток выглядит следующим образом:

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

(Предположим отличнуюUntilChanged после каждого оператора).

Как мне убедиться, что A..N вычисляются перед любой из их комбинаций? В идеале все в одном макро-цикле, чтобы пользовательский интерфейс не обновлялся с частичными результатами.

Я пробовал добавить asapScheduler в качестве последнего параметра в combLatest, но, похоже, он не работает с некоторыми входами обновление до вызоваcommonLatest и некоторых после запуска дополнительных вызовов.

Я также хотел бы иметь возможность добавить еще один уровень комбинаций:

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?

...