AsyncStorage没有返回回调

时间:2017-05-22 13:23:07

标签: react-native react-native-android asyncstorage

我在反应原生项目中使用redux-persist,在除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)
  }

代码'内部setInterval'永远不会被称为。它只在setInterval之外运行一次。如果我在代码外面调用 setInterval,它似乎运行得很好。我也尝试过回调格式与async / await版本,但似乎并不重要。

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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上的实际设备上遇到这种情况,无论如何其他人也报告过,所以问题仍然存在。