Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redux 如何使用ngrx捕捉错误_Redux_Ngrx_Ngrx Effects - Fatal编程技术网

Redux 如何使用ngrx捕捉错误

Redux 如何使用ngrx捕捉错误,redux,ngrx,ngrx-effects,Redux,Ngrx,Ngrx Effects,我正在尝试捕捉ngrx和angularfire2 firetore的错误 这就是效果 @Effect() delete$: Observable<Action> = this.actions$ .ofType(actions.DELETE) .map((action: actions.Delete) => action.id) .mergeMap(id => of(this.afs.doc

我正在尝试捕捉ngrx和angularfire2 firetore的错误

这就是效果

@Effect()
        delete$: Observable<Action> = this.actions$
        .ofType(actions.DELETE)
        .map((action: actions.Delete) => action.id)
        .mergeMap(id => 
         of(this.afs.doc<Collection(`collections/${id}`).delete()))
        .map(() =>  new actions.Success())
        .catch(err => of (new actions.Fail(err.message )));

即使行动没有完成,我也会不断取得成功。做这件事的好方法是什么?

目前,这段代码试图捕获整个流中的错误,而不是重要的内部可观察到的错误

试试这个:

@Effect delete$: Observable<Action> = this.action$
  .ofType(actions.DELETE)
  .map((action: actions.Delete) => action.id)
  .mergeMap(id => { 
    return of(this.afs.doc<Collection(`collections/${id}`).delete())
      .map(() =>  new actions.Success())
      .catch(err => of(new actions.Fail(err.message))
  });

@Effect delete$:可观察和。可能引发错误的流是可观察的(this.afs.doc…
的内部
,因此
.catch
应该位于该可观察的流上。在当前实现中(从上面的示例中),无论是否失败,它总是将(this.afs.doc…
结果映射到
新的actions.Success()

当前,此代码试图捕获整个流中的错误,而不是重要的内部可观察到的错误

试试这个:

@Effect delete$: Observable<Action> = this.action$
  .ofType(actions.DELETE)
  .map((action: actions.Delete) => action.id)
  .mergeMap(id => { 
    return of(this.afs.doc<Collection(`collections/${id}`).delete())
      .map(() =>  new actions.Success())
      .catch(err => of(new actions.Fail(err.message))
  });

@Effect delete$:可观察和。可能引发错误的流是可观察的(this.afs.doc…
的内部
,因此
.catch
应该位于该可观察的流上。在当前实现中(从上面的示例中),无论是否失败,它都会将(this.afs.doc…)的
结果映射到
新操作.Success()

感谢您的回复。不幸的是,我试过了,但没有达到预期效果。那么问题一定出在代码的其他部分。如果您的其余代码没有问题,那么我提供的代码就可以工作。我会查看
.delete()
方法返回的内容,看看它是否已经是可观察的。感谢您的回复。不幸的是,我试过了,但没有达到预期效果。那么问题一定出在代码的其他部分。如果您的其余代码没有问题,那么我提供的代码就可以工作。我将研究
.delete()
方法返回的内容,看看它是否已经是可观察的。