Эпопея с редукцией флаттера - действие takeUntil делает поток непригодным для использования - PullRequest
0 голосов
/ 24 апреля 2019

Я использую флаттер с редуксом и для обработки потоковых данных я использую редекс-эпики.

Примерно так:

Stream<dynamic> getDataEpic(Stream<dynamic> actions, EpicStore<AppState> store) {
  return Observable(actions)
      .ofType(TypeToken<RequestDataAction>())
      .flatMap((RequestDataAction action) {
        return getDataStream()
          .map(
              (data) => UpdateStateWithData(data)
          );
      })
      .takeUntil(actions.where((action) => action is CancelGetDataAction));
}

// getDataStream() - is a stream that returns some stuff... 

На моем экране в onInit я вызываю store.dispatch(RequestDataAction())и onDispose я вызываю store.dispatch(CancelGetDataAction()), что полностью уничтожает наблюдаемое, поэтому в следующий раз, когда я вызываю store.dispatch(RequestDataAction()), в следующий раз мой поток не отправляет данные, фактически весь Observable мертв!

Как я могу решить эту проблему?Насколько я вижу, проблема в takeUntil, потому что я полностью закрываю наблюдаемое ..

1 Ответ

0 голосов
/ 25 апреля 2019

Попробуйте переместить takeUntil в flatMap сразу после getStreamData().map().Это отменит внутреннюю наблюдаемую, а не внешнюю наблюдаемую при получении действия.

...