Angular 为什么在从另一个函数调用的函数中抛出错误会破坏角度应用程序
我的组件中有一个函数,它调用这样的APIAngular 为什么在从另一个函数调用的函数中抛出错误会破坏角度应用程序,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 (
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出现问题时,等待应该是第一件要尝试的事情!