如何在角度存储上实现错误处理 [英] how to implement error handling on store in Angular

查看:19
本文介绍了如何在角度存储上实现错误处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理现有的代码库,我的任务是在我的更新图表中实现错误处理,但不确定如何正确实现,因为我使用的是商店管理,所以如果我能就如何在商店中实现错误处理获得任何建议或帮助,我将不胜感激。

我做了类似的操作,并通过在我的ChartService.ts文件中提供错误的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

推荐答案

您非常接近:

  • 您的更新派送正常
  • 您的图表加载正常
  • 您的catchError错误

注意您调度操作以使用新数据更新存储区的方式,您需要在收到错误时执行相同的操作。

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

所以这个新操作将使用Reducer在存储中设置错误。现在,要知道是否发生了错误,您需要一个选择器来检查您刚刚在存储中更新了什么,这意味着您的saveClick()不会处理任何错误。您要么在ts文件中订阅选择器,要么在html中订阅选择器,具体取决于您要做什么。我真的帮不上你的语法,因为我不知道你的减法器/动作/选择器是什么样子的。

这篇关于如何在角度存储上实现错误处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆