在Angular 项目中使用NgRx,我有以下效果:

let i = 0

@Injectable()
export class Effects {
    testEffect$ = createEffect(
        () =>
            this.actions$.pipe(
                tap(() => console.log("action number:", i += 1)),
                mergeMap(() => throwError(() => "")),
            ),
        { dispatch: false, useEffectsErrorHandler: true },
    )

    // ...

对于调度的任何操作,Effect都会记录一条语句,然后用错误替换其内容.

这适用于10个动作.在恰好调度了10个动作之后,第11个动作将不再导致console.log个动作.事实上,根本不再执行任何效果,Redux Dev工具也不会记录从那时起的任何操作.

我意识到,如果我预计会发生错误,我应该使用catchError来优雅地处理它们.然而,它让我担心,如果有一个我不能处理的错误,它可能会在发生几次后 destruct 我的整个应用程序.

这一切为什么要发生?有什么办法可以阻止它吗?

推荐答案

这是预期的行为.

我们发现对于大多数项目来说,这是一个很好的起点.

您可以通过创建自己的错误处理程序并配置Effects来使用它来覆盖此行为.

有关更多信息和示例,请参阅https://ngrx.io/guide/effects/lifecycle#customizing-the-effects-error-handler

Typescript相关问答推荐

类型脚本不会推断键的值类型

React组件数组及其props 的类型定义

在React中实现具有独立页面的嵌套路径的最佳实践是什么?

如何在函数参数中使用(或模仿)`success`的行为?

创建一个根据布尔参数返回类型的异步函数

带占位符的模板文字类型何时扩展另一个?

为什么我的Set-Cookie在我执行下一次请求后被擦除

如何在typescript中设置对象分配时的键类型和值类型

为什么在这个例子中,我把缺少的属性添加到对象中时,TypeScrip没有拾取,如何修复?

限制返回联合的TS函数的返回类型

类型TTextKey不能用于索引类型 ;TOption

函数重载中的不正确TS建议

在VSCode中显示eslint错误,但在终端中运行eslint命令时不显示?(Vite,React,TypeScript)

Typescript 类型守卫一个类泛型?

创建Angular 为17的动态形状时出错

有没有办法传递泛型类型数组,以便推断每个元素的泛型类型?

在构建Angular 应用程序时,有没有办法通过CLI传递参数?

如何在TypeScrip中使用数组作为字符串的封闭列表?

递归地排除/省略两种类型之间的公共属性

如何编写一个接受 (string|number|null|undefined) 但只返回 string 且可能返回 null|undefined 的函数?