发生操作时,使用ngrx-effect调用服务

时间:2018-04-30 17:29:19

标签: angular typescript rxjs ngrx-effects

我正在学习效果,并尝试在搜索失败时发出警告通知。 我的搜索操作定义为

 export enum SearchActionTypes {
  SearchActionSearch = '[Search] Action search',
  SearchActionFulfilled = '[Search] Action search fulfilled',
  SearchActionFailed = '[Search] Action search failed',
}

我的应用中有一个可以显示通知的服务,我在调度SearchActionFailed操作时尝试调用此服务。但是,我不知道如何为此构建效果。目前我在这里:

    @Injectable()
export class NotificationEffects {
    @Effect()
    // show error notification when an illegal value is entered into search
    searchFailEffect = this.actions$.pipe(
        ofType(Search.SearchActionTypes.SearchActionFailed),
    );

    constructor(private actions$: Actions,
        private notificationService: NotificationService) {}
}

我希望在效果捕获操作时调用通知服务API,并且调用的结构如下:

this.notificationService.createNotification('type', 'message'))

在调度失败操作时,我不需要动作有效负载中的任何内容来调用此服务。但是,我不知道如何构建这种效果。我的主要问题是效果必须返回一个observable但我不需要任何我只需要知道什么时候搜索操作失败所以我可以调用该服务来显示一个通知警告用户他们的输入是假的

1 个答案:

答案 0 :(得分:1)

如果你想听取createNotification的发射,你可以将switchMap传递到你的管道中:

searchFailEffect = this.actions$.pipe(
    ofType(Search.SearchActionTypes.SearchActionFailed),
    switchMap(() => this.notificationService.createNotification('type', 'message')))
    .subscribe(x=>console.log(x)); //gives you emission from this.notificationService

如果您只是想做某事并且不关心结果又称"副作用",您可以使用.tap()

searchFailEffect = this.actions$.pipe(
    ofType(Search.SearchActionTypes.SearchActionFailed),
    tap(() => this.notificationService.createNotification('type', 'message')))
    .subscribe(x=>console.log(x)); //gives you ofType's emission