【发布时间】: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