【问题标题】:AsyncStorage is not returning the callbackAsyncStorage 不返回回调
【发布时间】:2017-05-22 13:23:06
【问题描述】:

我在一个 react native 项目中使用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)
  }

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

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

有什么想法吗?

【问题讨论】:

  • 您尝试过使用交互管理器或时间混合吗? timers link 对我来说,当我使用 getItem().then.. 时,AsyncStorage 工作正常。
  • 它可以使用交互管理器工作,但不能使用时间混合
  • 我认为间隔不起作用可能是因为 asyncStorage 所需的时间超过 3 秒。因此它会不断重新加载但未完成。可能你可以尝试使用更长的间隔。有时我的 AsyncStorage 需要 3- 7 秒加载图片 uri
  • 那么它应该以异步方式实现,问题是它永远不会实现
  • 我在我的 Android 7 中确认了这个错误。在第一次加载时工作,但如果应用程序被最小化或通过摇动设备重新加载,则 Promise 没有解决也没有完成(回调也是如此)。 @jsdario,你在 github 上报告了这个错误吗?

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


【解决方案1】:

在某些 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 的真实设备上不再遇到这种情况,无论如何其他人也报告了,所以问题仍然存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多