2017-05-25 80 views
4

我刚刚开始了解@ ngrx/store和@ ngrx.effects,并在我的Angular/Ionic应用程序中创建了我的第一个效果。它第一次运行正常,但如果我再次将事件发送到商店(即再次单击该按钮),则什么都不会发生(没有网络调用,控制台日志中没有任何内容)。有什么明显的我做错了吗?这里的效果:@ngrx效果不会第二次运行

@Effect() event_response$ = this.action$ 
    .ofType(SEND_EVENT_RESPONSE_ACTION) 
    .map(toPayload) 
    .switchMap((payload) => this.myService.eventResponse(payload.eventId,payload.response)) 
    .map(data => new SentEventResponseAction(data)) 
    .catch((error) => Observable.of(new ErrorOccurredAction(error))); 

感谢

回答

11

这听起来像一个错误发生。在这种情况下,catch返回的观察值中的动作将被放入效果的流中,然后效果将完成 - 这将防止在发出错误操作后效果运行。

移动mapcatchswitchMap

@Effect() event_response$ = this.action$ 
    .ofType(SEND_EVENT_RESPONSE_ACTION) 
    .map(toPayload) 
    .switchMap((payload) => this.myService 
    .eventResponse(payload.eventId, payload.response) 
    .map(data => new SentEventResponseAction(data)) 
    .catch((error) => Observable.of(new ErrorOccurredAction(error))) 
); 

构成switchMapcatch将防止如果发生错误,在完成的效果。

+0

这是否意味着使用Angular的全局错误处理程序将无法使用效果? https://stackoverflow.com/questions/47896171/is-it-possible-to-throw-errors-inside-ngrx-effects-without-completing-the-observ –

+0

谢谢!这对我有效 – Divya