基本概念
错误处理
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
实例。