Запустить действие после всех действий в эпопее - PullRequest
0 голосов
/ 13 июня 2018

Я хочу запустить действие после того, как все действия произошли.Вот мой код:

 public fetchCategories(action$: Observable<ICategoryAction>, store: Store<IAppState>) {
    return action$.pipe(
      ofType(CategoryActionType.FETCH_CATEGORIES),
      switchMap((action) => {
         return this._categoryService.list(action.payload)
      }),
      flatMap(data => [
        this._categoryAction.addCategories(new Categories(data)),
      ])
    ).catch((error) => {
      return Observable.of(this._commonAction.showError(error));
    })
    .concat(Observable.of(this._commonAction.hideLoading())); // <<== Doesn't work   
   }

Я хочу скрыть загрузку после успеха или ошибки в catch.Но это не concat с последними действиями.Я вижу, как все работает, пока addCategories().

Однако это не вызывает concat.

1 Ответ

0 голосов
/ 13 июня 2018

То, что у вас есть, не будет работать, потому что concat подписывается на свою внутреннюю Наблюдаемую только после завершения исходного Наблюдаемого.action$ на самом деле является Субъектом, который никогда не завершается (это будет означать, что он не может больше испускать действия).Тот же самый случай с catch, который у вас есть.

Это в значительной степени зависит от структуры ваших действий, но вы можете сделать что-то следующим образом:

action$.pipe(
  ofType(CategoryActionType.FETCH_CATEGORIES),
    switchMap((action) => this._categoryService.list(action.payload)
      .pipe(
        catchError(() => of(this._commonAction.showError(error)))
      ),
    }),
    mergeMap(data => [
      this._categoryAction.addCategories(new Categories(data)),
      of(this._commonAction.hideLoading()),
    ])

Яна самом деле догадываюсь, что должен делать ваш код, потому что я не знаю, что возвращает .addCategories.mergeMap в массиве просто сгладит его, что, вероятно, и нужно (но с одним элементом массива вы можете использовать только map)?

Кстати, помните, что вы смешиваете операторы pipable и prototype:https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...