【问题标题】:Some errors are uncaught by custom error handler自定义错误处理程序未捕获某些错误
【发布时间】:2017-10-15 13:35:45
【问题描述】:

我正在 Angular 4 中开发一个自定义错误处理程序,它将错误发送到远程错误跟踪器等。

取决于我何时抛出错误,它会被我的自定义处理程序捕获或不被捕获。如果我在 WebSQL 中启动事务后抛出异常,则不会捕获该错误,而是将其作为未捕获的错误记录在控制台中。

private executeSql<T>(sql: SqlStatement): Observable<T> {
  return Observable.create((observer) => {
    // If i throw exception before this.storage.transaction, the exception will be caught
    this.storage.transaction((tx) => {
      // Do it here, and it will not
      tx.executeSql(sql.statement, sql.params,
      (t, result) => {
        let resultRows = this.parseRowsFromResult(result);
        for (let i = 0; i < resultRows.length; i++) {
          observer.next(resultRows[i]);
        }

        observer.complete();
      },
      (t, error) => {
        observer.error(error.message.toString());
        return true;
      });
    });
  });
}

this.storage 是一个 WebSQL 对象。

有人有这方面的经验吗?

【问题讨论】:

    标签: angular ionic3 web-sql


    【解决方案1】:

    异常是在 Angular 代码之外引发的,因此不会考虑默认的 Angular 错误处理程序。

    为防止这种情况发生,请确保当项目提交给观察者时,它是在一个角度区域内完成的。 Angular 提供了以下类可以做到这一点:https://angular.io/api/core/NgZone

    通过将observer.nextobserver.error 包装在NgZone.runGuarded 中,提交的错误也将提供给角度错误处理程序。

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 2014-03-07
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      • 2022-10-06
      • 2020-03-17
      • 1970-01-01
      • 2018-04-29
      相关资源
      最近更新 更多