【问题标题】:Does a subscription throw an error if i do not catch it?如果我没有收到订阅,订阅会引发错误吗?
【发布时间】:2019-08-01 08:48:36
【问题描述】:

我正在使用Subjectrxjs,并且每次我编写代码以捕获错误并且除了抛出它之外什么都不做。但我不知道它是好还是完全没用,因为如果我没有抓住它,默认情况下会抛出错误。你能帮我吗 ?我在网上找不到任何答案。

这是一个例子:

    import {Subject} from 'rxjs';

    /* ... */

    public someObs : Subject<SomeType> = new Subject<SomeType>

    /* ... */

    ngOnInit(): void {
        this.someObs.subscribe((elem: SomeType) => {
            /* some code */
        }, (err) => {
            throw err;
        });
    }

也许我可以这样做:

    ngOnInit(): void {
        this.someObs.subscribe((elem: SomeType) => {
            /* some code */
        });
    }

【问题讨论】:

标签: angular typescript error-handling rxjs subject


【解决方案1】:

而不是抛出错误;您可以尝试在控制台中登录它

ngOnInit(): void {
        this.someObs.subscribe((elem: SomeType) => {
            /* some code */
        }, function(error) { 
               console.log("Error - " + error.error.text); });
    }

【讨论】:

  • 但这不是我想要的。我认为,作为一个错误,它可能是这样的console.error(error.message),但它与throw error 的结果相同。
  • 好吧,我想我有点明白你的意思了。据我所知,如果发生错误并且未处理,则流将被终止。请查看我遇到的以下链接,看看它是否有帮助 medium.com/@benlesh/… 。如果没有,让我们看看是否有人有更好的解释。
【解决方案2】:

在 rxjs 错误处理中,一个流只能出错一次。抛出错误后,流将不会发出任何进一步的值。这意味着如果一个特定的流出错,您将无法再使用它。

您可以使用以下方法导入 Observable throwError:

import { throwError } from 'rxjs';

并以如下有意义的方式处理您的错误:

if (error.status === 404)
    return throwError( new NotFoundError(error) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2019-02-11
    • 2019-04-06
    相关资源
    最近更新 更多