Angular 为什么在从另一个函数调用的函数中抛出错误会破坏角度应用程序

Angular 为什么在从另一个函数调用的函数中抛出错误会破坏角度应用程序,angular,typescript,exception,error-handling,Angular,Typescript,Exception,Error Handling,我的组件中有一个函数,它调用这样的API async func1() { this.isLoading = true; try { await this.api.callToApi(); } catch (ex) { console.log(ex); } } 在API内部,函数callToApi的定义如下 try { // make a call to API and return result } catch (

我的组件中有一个函数,它调用这样的API

async func1() {
    this.isLoading = true;
    try {
      await this.api.callToApi();
    } catch (ex) {
      console.log(ex);
    }
  }
在API内部,函数
callToApi
的定义如下

try {
      // make a call to API and return result
    } catch (ex) {
      this.handleError(ex);
    }
然后是函数
handleError

async handleError(er: any) {
      throw er;
  }
我的问题是,当我从
func1
调用api时,出现了一些错误,然后函数
handleError
抛出错误,而
func1
没有捕捉到错误,因此,整个应用程序都会中断。据我所知,在
handleError
中抛出错误后,此错误应传播到被调用的,在本例中为
func1
。为什么不是这样

请注意,我只显示了相关代码,通过从
callToApi
函数中删除整个
try-catch
块,我可以使其根据需要工作,并且根本不使用
handleError
,但这不是重点


Edit1:我想澄清的是,我想激活
func1
中的catch块

它看起来像这样:

func1()
--> callToApi()
----> handleError() (on error propagate it back to func1)
        try {
            // make a call to API and return result
        } catch (ex) {
            await this.handleError(ex);
        }

Edit2:为了澄清混淆,我之所以有
handleError
,是因为可能有多个错误,我需要在其中处理。但是,有一个特定错误必须传播回func1才能在那里处理。这可能吗?

handleError是用
async
声明的,这意味着当您在函数中抛出错误时,它实际上返回一个被拒绝的承诺。如果删除
async
语句,则
func1
将捕获它:

    handleError(er) {
        throw er;
    }
如果您确实需要该函数是异步的,那么您可以将
callToApi
修改为如下内容:

func1()
--> callToApi()
----> handleError() (on error propagate it back to func1)
        try {
            // make a call to API and return result
        } catch (ex) {
            await this.handleError(ex);
        }
或者这个:

        try {
            // make a call to API and return result
        } catch (ex) {
            return this.handleError(ex);
        }

handleError
是用
async
声明的,这意味着当您在函数中抛出错误时,它实际上返回一个被拒绝的承诺。如果删除
async
语句,则
func1
将捕获它:

    handleError(er) {
        throw er;
    }
如果您确实需要该函数是异步的,那么您可以将
callToApi
修改为如下内容:

func1()
--> callToApi()
----> handleError() (on error propagate it back to func1)
        try {
            // make a call to API and return result
        } catch (ex) {
            await this.handleError(ex);
        }
或者这个:

        try {
            // make a call to API and return result
        } catch (ex) {
            return this.handleError(ex);
        }

我觉得你在试图解决一个问题,但没有告诉我们问题是什么。看起来你的解决方案不起作用。那么,您试图在这里捕获什么样的错误,为什么需要捕获,为什么源代码如此不稳定,以至于有两个嵌套捕获?我希望激活
func1
中的catch块。第一个函数
func1
有一个catch块。它通过
callToApi
调用API,在出现错误时调用
handleError
,后者只是抛出它。我想在
handleError
抛出它的错误后,这个错误被
func1
捕获。哦,我可以重现你的问题。我明白你的意思。确实显示了错误,但它不是由
func1
函数处理的。我觉得你在试图解决这里的问题,但没有告诉我们问题是什么。看起来你的解决方案不起作用。那么,您试图在这里捕获什么样的错误,为什么需要捕获,为什么源代码如此不稳定,以至于有两个嵌套捕获?我希望激活
func1
中的catch块。第一个函数
func1
有一个catch块。它通过
callToApi
调用API,在出现错误时调用
handleError
,后者只是抛出它。我想在
handleError
抛出它的错误后,这个错误被
func1
捕获。哦,我可以重现你的问题。我明白你的意思。确实显示了错误,但它不是由
func1
函数处理的。它确实解决了问题。看起来每次异步Js出现问题时,等待应该是第一件要尝试的事情!它确实解决了这个问题。看起来每次异步Js出现问题时,等待应该是第一件要尝试的事情!