一些错误未被自定义错误处理程序捕获
Some errors are uncaught by custom error handler
我正在 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 代码之外引发的,因此不会考虑默认的 angular 错误处理程序。
为防止这种情况发生,请确保在将项目提交给观察者时,它是在 angular 区域内完成的。
Angular 提供以下 class 可以做到这一点:https://angular.io/api/core/NgZone
通过将 observer.next
和 observer.error
包装在 NgZone.runGuarded
中,提交的错误也将提供给 angular 错误处理程序。
我正在 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 代码之外引发的,因此不会考虑默认的 angular 错误处理程序。
为防止这种情况发生,请确保在将项目提交给观察者时,它是在 angular 区域内完成的。 Angular 提供以下 class 可以做到这一点:https://angular.io/api/core/NgZone
通过将 observer.next
和 observer.error
包装在 NgZone.runGuarded
中,提交的错误也将提供给 angular 错误处理程序。