Ngrx — Использование эффекта из другого модуля

#angular #ngrx #ngrx-effects

#angular #ngrx #ngrx-эффекты

Вопрос:

Здравствуйте, у меня есть эффект, который после нажатия кнопки отправляет новое действие для создания чего-либо,

 @Effect({dispatch: false})
createSomething$ = this._actions$.pipe(
    ofType(
        clientsActions.Create),
    mergeMap((action) => this._service.add(action.payload)
        .pipe(
            tap(() => this._router.navigate(['somewhere'])),
            catchError(error => of())
        ))
);
  

И это работает хорошо, эффект отправляет запрос и перенаправляет, но теперь я хотел бы добавить действие из другого класса, который находится в корневом модуле, однако, когда я пытаюсь сделать что-то подобное

 @Effect({dispatch: false})
createSomething$ = this._actions$.pipe(
    ofType(
        clientsActions.Create),
    mergeMap((action) => this._service.add(action.payload)
        .pipe(.map(() => ({type: this.otherActions.doAction),
            tap(() => this._router.navigate(['somewhere'])),
            catchError(error => of())
        ))
);
  

Это не работает, и другие действия ничего не делают, даже не отображаются в инструментах разработки, и теперь я в замешательстве от того, что произошло. Я пробовал также concatMap и т.д.

Ответ №1:

Используйте карту слияния и возвращайте массив [{type:ActionType}]

 @Effect({dispatch: false})
createSomething$ = this._actions$.ofType(clientsActions.Create)
.pipe(
    mergeMap((action) => this._service.add(action.payload).pipe(
        mergeMap(() => ([{type: this.otherActions.doAction}]),
        tap(() => this._router.navigate(['somewhere'])),
        catchError(error => of())
        ))
);