Используйте ngrx-эффект для вызова службы, когда происходит действие - PullRequest
0 голосов
/ 30 апреля 2018

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

 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'))

Мне ничего не нужно из полезной нагрузки действия, просто вызов этой службы, когда отправляется действие сбоя. Однако я не знаю, как структурировать этот эффект. Моя главная проблема заключается в том, что эффект должен возвращать наблюдаемое, но мне ничего не нужно, мне просто нужно знать, когда происходит сбой поискового действия, чтобы я мог позвонить в службу, чтобы отобразить уведомление, предупреждающее пользователя о том, что его ввод ложен

1 Ответ

0 голосов
/ 30 апреля 2018

Если вы хотите прослушать излучение 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
...