javascript – TypeScript / Angular try catch,try块中的任何错误都不会阻塞

我正在使用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); 
}

在某些情况下,来自API的’data’返回’null’,
但扔掉不会阻挡
另外,尝试没有抛出,它给’数据’的空错误…在这种情况下也不会捕获块.

解决方法:

try / catch不会捕获传递给subscribe(或者然后,或者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;
});

现在您可以订阅

checkedData.subscribe(
  data => /* do something with data */,
  console.error
);

注意:throwError是rxjs6.对于rxjs5,它将返回ErrorObservable(“null data”)(我认为).

上一篇:javascript – Angular:设置选定的值


下一篇:javascript – 将非标准调度程序传递给运算符