То, что у вас есть, не будет работать, потому что 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