ngrx组件存储效果在promise出错后未触发



我的实现

大家好,我正在为我的超级数据库项目使用ngrx组件存储,在数据库中有一种删除方法来删除特定的行,如果删除了一个出错的产品(这是一个承诺(,我正在tapResponse中处理该异常。

readonly deleteProduct$ = this.effect(
(
productID$: Observable<string>
): Observable<PostgrestResponse<Product>> => {
return productID$.pipe(
switchMap((productID) =>
this._supabaseService.delete<Product>(
productsPath,
'id',
productID,
)
),
tapResponse(
({ data: products, error }) => {
this.patchState({
loading: false,
error,
});
this.deleteProduct(products[0]?.id);
this.toastSuccessMessage(error, 'Deleted Successfully!');
this.handleError(error);
},
(error: Error) => {
this.handleError(error);
}
),
catchError(() => EMPTY)
);
}
);

问题

如果我的deleteProduct$effect出错,我的订阅已关闭,我不知道为什么,之后,如果我再次执行deleteProduct$效果,它不会触发

我的猜测

我认为错误不是通过catchError产生的,所以我的订阅被关闭了,但我不知道如何解决这个问题。

我希望我已经说清楚了,如果不是的话,我会尽量说清楚。

我真的很感激你能提供的任何帮助。

您应该捕获的错误不是在主流中,而是在HTTP请求流中。否则,主流会被取消。

下面是一个示意图示例:

loadProduct$ = this.effect(productId =>
productId.pipe(
switchMap(productId =>
// pipe is applied to the response
this.httpService.get(productId).pipe(
tapResponse(
product => {
this.patchState({ product });
},
error => {
this.handleError(error);
}
)
)
)
)
);

PS。这个问题在NGRX效果中也很常见。

最新更新