生产中React Native中的全局未处理的承诺拒绝处理程序

时间:2019-09-03 10:31:45

标签: javascript reactjs react-native promise

我们正在开发对本机应用程序的响应,并将firebase与crashlytics结合使用,因此我们可以了解到该应用程序的折痕和所有未处理的错误。

但是,我们也希望在应用程序中收到所有未处理的承诺拒绝的通知-因此,我们希望添加全局处理程序/侦听器,在这种情况下会将信息发送到我们的服务器。

在某些重要情况下,我们已经在各自的.catch()块中发送了此类信息,但是如果我们以后添加新的Promise而忘记处理它们,该怎么办-那么我们希望接收信息而不是不知道我们应用中的潜在错误。

还是不好的做法?

2 个答案:

答案 0 :(得分:1)

要在全球范围内跟踪未处理的承诺被拒,您可以使用我的react-native-promise-rejection-utils包:

import {
  getUnhandledPromiseRejectionTracker,
  setUnhandledPromiseRejectionTracker,
} from 'react-native-promise-rejection-utils'

const prevTracker = getUnhandledPromiseRejectionTracker()

setUnhandledPromiseRejectionTracker((id, error) => {
  console.warn('Unhandled promise rejection!', id, error)

  if (prevTracker !== undefined) {
    prevTracker(id, error)
  }
})

还是不好的做法?

总是有机会收到应用程序的业务逻辑中未描述的意外错误(例如,某些第三方库引发的异常)。全局记录意外错误是一个好习惯,因为它可以让您知道该错误根本存在。

答案 1 :(得分:0)

您可以为此使用componentDidCatch。您可以包装顶级路由组件,也可以包装可能包含晦涩代码的组件。由您决定如何最好地处理应用程序崩溃。

componentDidCatch(error, errorInfo){}`

第一个方法参数是引发的实际错误。第二个参数是具有componentStack属性的对象,其中包含组件堆栈跟踪信息。