Skip to content

React Native全局捕获异常和未处理的Promise错误 #8

Open
@1uokun

Description

@1uokun

全局捕获JS运行时错误代码

react-native / polyfills / error-guard.js

使用global.ErrorUtils.setGlobalHandler全局捕获错误以避免崩溃

if(!__DEV__){
  global.ErrorUtils.setGlobalHandler(async (e, isFatal) => {
      if (isFatal) {
          e.name //错误类型
          e.message //错误信息
          e.componentStack||e.stack //错误代码定位
      }
  }
}

补充:

  • isFatal
    建议保留isFatal=true的判断,尽管目前都是true [1]

全局捕获未处理的Promise错误

react-native / Libraries / Promise.js

require('promise/setimmediate/rejection-tracking').enable({
    onUnhandled:(id, error = {})=>{
        console.log("全局捕获未处理的Promise错误",id,error)
        console.log(error.name)
        console.log(error.message)
        console.log(error.componentStack||error.stack)
    }
})

重启rn页面

  • ios
    NativeModules.BridgeReloader.reload()
  • android
    @ReactMethod
    public void reload() {
      Activity activity = getCurrentActivity();
      Intent intent = activity.getIntent();
      activity.finish();
      activity.startActivity(intent);
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    blog日常开发笔记

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions