1

Ionic Angular 应用程序 (cordova) 中的 iOS 和 Android 之间的 console.error(error) (更准确地说是 error.message 值)是否有不同的原因?

我写了这些行以获得异常:

const a = null;
a.top();

然后是我的ErrorHandler 中的console.error(error)。

Android 的输出看起来不错,但 iOS 的输出不够清晰。我认为这就是为什么在 Rollbar 上没有正确构建堆栈跟踪的原因。

输出示例:

安卓 在此处输入图像描述

iOS 在此处输入图像描述

日志在跟踪方面有所不同,对于 Android,每个跟踪都以“at ...”开头并以文件名结尾,但对于 iOS,所有错误都以“step@”而不是“at”出现在一行中,并且没有链接去文件。

任何人都知道为什么会这样。

  • 科尔多瓦:10.0.0
  • 科尔多瓦-ios:6.1.0
  • 角度:8.0.0

解决方案 错误是从异步方法引发的。因此,Angular 的 ErrorHandler 会捕获从非等待异步方法抛出的错误,并将错误作为 Promise 返回。

因此在 handleError() 方法中,添加下面的行

if (error.promise && error.rejection) { error = error.rejection; }
// handle your error

由于以下原因找到了这个解决方案: Angular custom error handler not getting error type from promise

完整答案如下。

4

2 回答 2

0

该错误是从异步方法引发的。因此,Angular 的 ErrorHandler 会捕获从非等待异步方法抛出的错误,并将错误作为 Promise 返回。

async foo() {
 const a = null;
 a.top();
}

foo(); // no await

角度错误处理程序文档

因此在 handleError() 方法中,添加下面的行

   handleError() {
     if (error.promise && error.rejection) { error = error.rejection; }
     // handle your error
   }

由于以下原因找到了这个解决方案:Angular custom error handler not getting error type from promise

于 2021-01-15T13:57:55.650 回答
0

基本上,当你给null一个对象赋值并尝试访问它的任何属性时,你会得到一个错误,这个错误的堆栈跟踪实际上取决于 js 引擎

  • Cannot read property of null在铬
  • null is not an object在 Safari 中

更新: 事实上,真正的问题是why IOS's error wasn't well built on Rollbar,正如建议的那样,我加入了 OP 在评论中添加的内容:

最大的区别在于,对于 Chrome,错误在每一行(堆栈跟踪)上进行拆分,每一行以“at ....”开头,文件在末尾(例如 main.js),但对于 iOS,错误继续出现与“step@”而不是“at”对齐,就好像它被缩小了一样

于 2021-01-11T12:38:29.693 回答