【发布时间】:2017-01-16 21:47:29
【问题描述】:
我有一个关于@ngrx 效果的非常基本的问题:如何忽略在效果执行期间发生的错误,使其不影响未来的效果执行?
我的情况如下:我有一个动作(LOGIN)和一个监听那个动作的效果。如果此效果内部发生错误,我想忽略它。在此错误后第二次分派 LOGIN 时,应再次执行效果。
我第一次尝试这样做是:
@Effect()
login$ = this.actions$
.ofType('LOGIN')
.flatMap(async () => {
console.debug('LOGIN');
// throw an error
let x = [];x[0]();
})
.catch(err => {
console.error('Error at login', err);
return Observable.empty();
});
如预期的那样,第一次调度 LOGIN 会引发并捕获错误。但是,如果我之后再次发送 LOGIN,则什么也不会发生;效果没有执行。
因此我尝试了以下方法:
.catch(err => {
return this.login$;
});
,但这会导致死循环……你知道如何在不阻止效果执行的情况下捕获错误吗?
【问题讨论】:
-
我不知道ngrx,但你可以只在流中
.retry()而不是捕捉。 -
你使用的ngrx是什么版本?我用最新版本的ngrx试过这个,似乎它不起作用..版本,我现在正在使用:“@ngrx/core”:“^1.2.0”,“@ngrx/effects”:“^6.1.2”, "@ngrx/entity": "^6.1.2", "@ngrx/store": "^6.1.2",