8.7 版本发布—WinterCG 兼容性第一部分
了解更多

NativeScript 中的错误处理方式与 Web 应用有所不同。默认情况下,当 NativeScript 中抛出未处理的异常时,应用可能会崩溃,并显示包含相应堆栈跟踪的错误。当应用处于**开发**模式时,这可能是期望的行为。但是,当应用处于**生产**环境时,应用崩溃会严重损害应用的信誉并导致用户流失。在许多情况下,您希望在开发和生产环境之间采用不同的错误处理行为(例如,应用冻结、空白屏幕、导航失败)。

NativeScript 允许根据应用是否处于**开发**或**生产**模式,通过以下三种方式设置错误处理

开发模式

允许应用崩溃:在发生错误时立即抛出异常并使应用崩溃。

ts
const errorHandler: TraceErrorHandler = {
  handlerError(err) {
    throw err
  },
}

防止应用崩溃:将错误消息写入控制台并继续执行应用。

ts
const errorHandler: TraceErrorHandler = {
  handlerError(err) {
    Trace.write(err, 'unhandled-error', type.error)
  },
}

生产模式

防止应用崩溃:例如,将错误报告发送到分析服务器,但继续执行应用。

ts
const errorHandler: TraceErrorHandler = {
  handlerError(err) {
    reportToAnalytics(err)
  },
}

有关 TraceErrorHandler 的更多详细信息,请参阅NativeScript 中的跟踪页面。

禁用将未捕获的 JS 异常重新抛出到原生

Nativescript 还允许通过禁用将未捕获的 JS 异常重新抛出到原生来防止应用崩溃。这可以通过在nativescript.config.ts文件中将 discardUncaughtJsExceptions 属性设置为 true 来实现。

ts
ios: {
...
    "discardUncaughtJsExceptions": true,

},
android: {
...
    "discardUncaughtJsExceptions": true,

},

要处理已丢弃的异常,可以使用两种方法

  • 侦听 Application.discardedErrorEvent 并使用接收到的 DiscardedErrorEventData 实例
ts
import { Application, DiscardedErrorEventData } from '@nativescript/core'

Application.on(
  Application.discardedErrorEvent,
  function (args: DiscardedErrorEventData) {
    const error = args.error

    console.log('Received discarded exception: ')
    console.log(error.message)
    console.log(error.name)
    console.log(error.stack)
    console.log(error.nativeError)
    // for example, report the exception to an analytics solution here
  }
)
  • 将一个单参数函数分配给 global.__onDiscardedError,该函数将接收异常作为 NativeScriptError 实例。
下一页
手势