我正在使用Angular和TypeScript.在API调用的情况下,我使用了try catch构造来进行错误处理.如果在try块中发生任何错误,它就不会捕获阻塞.应用只在那里终止.
我也尝试过使用throw过.这是一个示例代码段,
try {
this.api.getAPI(Id).subscribe( // this.api is my api service and getAPI is present there
(data: any) => {
if (data == null) {
throw 'Empty response';
}
},
(error: HttpErrorResponse) => {
console.log(error);
};
} catch(e) {
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
在某些情况下,来自API的"数据"返回'null',但throw不会捕获块ALSO,尝试不抛出,它为'data'提供null错误...在这种情况下也不会捕获块.
小智 10
A try/catch将不会捕获传递给subscribe(或then,setTimeout或任何smiilar)的回调中的任何内容,这些回调在不同的"tick"或"microtask"上运行.您必须在发生任务时捕获错误.
如果我理解错误发生时你想要做什么,我可以建议更好的选择.如果您真正想要做的就是记录它,那么当然可以在检查null之后立即执行此操作.
您可以考虑在使用observable之前映射observable,并在null的情况下在observable上发出错误,例如:
const checkedData = this.api.getAPI(Id).pipe(map(data => {
if (data === null) return throwError("null data");
return data;
});
Run Code Online (Sandbox Code Playgroud)
现在您可以订阅
checkedData.subscribe(
data => /* do something with data */,
console.error
);
Run Code Online (Sandbox Code Playgroud)
注意:throwError是rxjs6.对于rxjs5,它return ErrorObservable("null data")(我认为).
| 归档时间: |
|
| 查看次数: |
14970 次 |
| 最近记录: |