是否有解决方案可以在 React Native 应用程序(iOS 和 Android(中报告不同的错误作为全局处理程序?
我对以下情况感兴趣:
- 未处理的拒绝
- 未处理的异常
- 本机端的错误
通过报告,我的意思是将它们发送到一些第三方服务,在那里您可以跟踪错误。
在 RN 中有一个 ErrorUtils 全局处理程序,用于处理 RN JS 层的未捕获和捕获异常。您可以使用它来设置处理程序,如下所示:
if (ErrorUtils._globalHandler) {
instance.defaultHandler = ErrorUtils.getGlobalHandler && ErrorUtils.getGlobalHandler() || ErrorUtils._globalHandler;
ErrorUtils.setGlobalHandler(instance.wrapGlobalHandler); //feed errors directly to our wrapGlobalHandler function
}
和处理程序方法
async wrapGlobalHandler(error, isFatal){
const stack = parseErrorStack(error);
//Add this error locally or send it your remote server here
//*> Finish activity
setTimeout (() => {
instance.defaultHandler(error, isFatal); //after you're finished, call the defaultHandler so that react-native also gets the error
if (Platform.OS == 'android') {
NodeModule.reload()
}
}, 1000);
}
请注意,在上面的代码中,您需要仅为 android 创建一个节点模块,并在 ReactContextBaseJavaModule 中编写一个 React Native 桥接方法:
@ReactMethod
public void reload() {
Activity activity = getCurrentActivityInstance();
Intent intent = activity.getIntent();
activity.finish();
activity.startActivity(intent);
}
谢谢!