5

redux-persist在一个 react native 项目中使用,它在除 Android 7 之外的大量设备中运行良好。我正在尝试调试为什么我的本地存储也不持久的问题,并发现了这一点:

以下代码在 React Native 组件生命周期内执行

  componentDidMount() {
    attachObservables(store)
    setInterval(async () => {
      console.log('Inside setInterval')
      const data = await AsyncStorage.getAllKeys()
      console.log('inside the getAllKeys')
      data.forEach(async k => {
        const value = await AsyncStorage.getItem(k)
        console.group(k)
        console.log(value)
        console.groupEnd()
      })
    }, 3000)
  }

'Inside setInterval' 之后的代码永远不会被调用。如果在 setInterval 之外,它只会运行一次。如果我在 setInterval之外调用一次代码,它似乎运行得很好。我也尝试过回调格式与异步/等待版本,但这似乎并不重要。

我在使用 firebase js 库时遇到了同样的问题(回调在第一个之后永远不会返回)。我现在正在寻找解决问题的替代方法。

有任何想法吗?

4

1 回答 1

4

在某些 Android 版本中,从 React Native 0.51 开始,运行时可能会被其他原生模块阻塞,从而阻碍上述方法的解析。

它可以通过https://github.com/facebook/react-native/issues/14101#issuecomment-345563563修复,确保此方法使用线程池中的空闲线程。

PR 已经提交,我希望在未来的版本中发布。如果您希望它立即使用此修复程序,可以在此处获得https://github.com/netbeast/react-native

编辑:我在 react-native@0.53 的真实设备上不再遇到这种情况,无论如何其他人也报告了,所以问题仍然存在。

于 2017-12-12T12:09:43.407 回答