Javascript 角度-何时处理可观察的';s订阅

Javascript 角度-何时处理可观察的';s订阅,javascript,angular,typescript,error-handling,Javascript,Angular,Typescript,Error Handling,我发现自己在使用最新版本中编写的主题代码并搜索web,并且我发现大多数开发人员都无法处理订阅错误 我的问题是:什么时候我必须处理可观察订阅中的错误? 无错误处理: this.myService.observable$.subscribe( (data) => { // do stuff with data } ); this.myService.observable$.subscribe( (

我发现自己在使用最新版本中编写的主题代码并搜索web,并且我发现大多数开发人员都无法处理
订阅
错误

我的问题是:什么时候我必须处理
可观察订阅中的错误?

无错误处理:

    this.myService.observable$.subscribe(
        (data) => {
            // do stuff with data
        }
    );
    this.myService.observable$.subscribe(
        (data) => {
            // do stuff with data
        },
        err => {
            // do stuff with error
        }
    );
使用错误处理:

    this.myService.observable$.subscribe(
        (data) => {
            // do stuff with data
        }
    );
    this.myService.observable$.subscribe(
        (data) => {
            // do stuff with data
        },
        err => {
            // do stuff with error
        }
    );
我基本上找到了第一个版本,但是

不处理订阅错误不是一个问题吗


这难道不会降低代码的可靠性、可测试性和更容易失败吗?

处理错误以向用户提供反馈或返回默认行为是一种很好的做法

例如,如果您试图联系REST服务并发生通信,则可能需要通知用户连接问题或加载缓存数据

或者如果REST服务返回错误。例如,您的应用程序是一个预订应用程序,用户正在执行订单,但一旦提交订单,就没有更多的库存商品。REST服务返回并出错,您应该向用户显示没有其他项

此外,在角度样式指南中:

数据管理的细节,例如头、HTTP方法、缓存、错误处理和重试逻辑,与组件和其他数据使用者无关


这意味着您应该从服务中返回有意义的消息。

为什么错误处理很重要

现在让我们看看为什么在可观测数据中需要错误处理

示例:

this.service.send(this.shareData).subscribe(() => {

      // Here you are sure that the send has shared the data sucessFully

    }, (error) => {

      /* Now If you want to handle errors Like Front End Errors and Log this
         In your backEnd DB So solve it and fix it */

      /* Example below check error type is It from frontEnd and log error through Api */

      if(error.type !== 'API') {
        this.logService.log({
          Level: 2,
          Message: 'Failed to setFromDB',
        });
      }
    });

如果您想处理错误并对错误执行某些操作,最好设置错误Cb。@YordanNikolov是的,我在观察对象上设置了Cb,或者至少在观察对象的大部分上设置了Cb。但我的问题更多的是关于好的实践,以及为什么尊敬的开发人员似乎“不遵循”它们。也许有一个不同的处理,我还不知道。也许它直接在可观察的delcaration中得到处理(例如Http请求),对我来说,处理所有错误以通知用户、将这些错误发送到后端并跟踪它始终是一种好的做法。我想到的另一个最佳实践是,使用单独的函数处理程序(函数statt)而不是IIF。@YordanNikolov 100%同意。这就是为什么我提出这个问题,为什么不处理这些错误。也许这是有原因的。好吧,这只是个人的考虑吗?例如,仅用于通知用户“这是因为这个原因而中断的”。我不知道为什么这不能说服我,我的意思是,我们应该始终将操作的结果传达给用户,但不处理代码中的错误是一件奇怪的事情。我认为错误是在可观察的结构中处理的,因此,代码方面,错误是在那里处理的。然后在订阅中,我们只处理对最终用户的反馈。是的,错误确实是一种结果。但不处理它意味着有一天你的应用程序会中断,你甚至不知道为什么如果你所有的代码都是订阅,而没有错误处理…是的,这就是我所说的需要处理错误。不要让你的代码崩溃!很少有这种情况是真的。唯一的情况是,如果您的服务将数据保存并加载到内存中,则可以“安全”避免错误处理。我理解。我知道为什么我们应该处理错误,但这就是为什么我不太明白为什么在大多数情况下开发人员不处理可观察订阅的错误。它只与那些直接与用户交互的订阅相关吗?你指的是
Angular开发团队
还是使用Angular的
dev,比如说社区开发人员。我所关注的所有示例和主题都缺少subscription的错误处理(80%)。这一定是有原因的。我认为一个好的开发人员在创建一些函数时会处理错误。对于您的问题,解决方案是角度,它提供了处理可观测误差的功能。是否使用此功能取决于您。。如果您的功能需要处理错误,您应该记录…根据我的说法,对于像用户活动这样的订阅者,您应该记录错误,因为用户是使用我们提供的服务的密钥。据用户称,只有0.5%的用户在使用您的服务时会记录错误,而其他用户只有您知道他们在做什么。。