【问题标题】:how to implement error handling on store in Angular如何在 Angular 中的 store 上实现错误处理
【发布时间】:2020-06-24 02:20:41
【问题描述】:

我正在处理现有的代码库,我的任务是在我的更新图表中实现错误处理,但由于我正在使用商店管理,我不太确定如何正确实现,所以如果我能得到任何建议或关于如何在商店中实现错误处理的帮助。

我做了类似的事情,并通过在我的 ChartService.ts 文件中提供错误的 api 路由来测试它,但我没有收到错误消息,并且无论我是否给予权利,它总是说它“已保存”更新图表的api路由或错误的api路由。

我现在遇到的问题是,即使 api 或网络出现错误,它也没有给我错误的快餐栏消息。

import {Store} from '@ngrx/store';

  saveClick(){
    try
    {
      this.store.dispatch(updateChart({chart: this.chart}));
      this.snackbar.open("Changes to \"" + this.chart.name + "\" has been saved", "", { duration: 2500 });
    }
    catch(error)
    {
      this.snackbar.open("Error has occurred. Could not update Chart", "", { duration: 2500 });
    }
  }

Chart.effets.ts

    updateChart$ = createEffect(() => this.actions$.pipe(
        ofType(ChartActionTypes.UpdateChart),
        exhaustMap((props: { chart: Chart }) => this.chartService.updateChart(props.chart)//this.getChart(props)
            .pipe(
                // tap(c => console.log('TAPPY TAP', c)),
                map(chart => {
                    return chartLoaded({ chart: chart })
                }),
                catchError(() => EMPTY)
            ),
        )
    )
    )

HTML

    <button color="primary" mat-flat-button (click)="saveClick()" [disabled]="this.chart.isPublished">Save</button>

它不会继续运行,但我在 stackblitz 中上传了该组件的所有代码,希望有人可以通过查看代码来帮助我。谢谢https://stackblitz.com/edit/angular-ivy-ncbmb4

【问题讨论】:

    标签: angular typescript error-handling ngrx ngrx-store


    【解决方案1】:

    你很接近:

    • 您的更新发送很好
    • 您的 chartLoaded 很好
    • 你的 catchError 错误

    请注意您发送操作以使用新数据更新您的商店的方式,当您遇到错误时需要执行相同操作。

    catchError((error: any, effect: Observable<Action>) => effect.pipe(startWith(chartUpdateError({ error }))))
    

    因此,这个新操作将使用 reducer 在 store 中设置错误。现在要知道是否发生了错误,您需要一个选择器来检查您刚刚在商店中更新的内容,这意味着您的 saveClick() 不会处理任何这些。您可以在 ts 文件或 html 中订阅选择器,具体取决于您要执行的操作。我无法真正帮助您处理语法,因为我不知道您的 reducer/action/selector 是什么样的。

    【讨论】:

    • 您好,感谢您提供的一些提示,但您能否在 stackblitz 中查看此组件的所有代码并帮助我stackblitz.com/edit/angular-ivy-ncbmb4。它不会运行,但只是希望您能看到所有代码,并且您可以帮助我。谢谢
    • 你需要提供reducer/action/state/selector
    • 好的...我刚刚做了,但我不确定我是否上传了正确的文件,所以如果您需要更多,请告诉我。谢谢
    • 在这里,有多种方法可以监控错误,但我只是在订阅中做到了。我可能错过了一些导入,但这基本上应该是这样的:stackblitz.com/edit/…
    • 我在我添加的代码周围添加(不解释任何内容)只是为了更容易看到更改
    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2016-03-03
    • 2019-02-03
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多