我在反应原生项目中使用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库(回调函数在第一个之后永远不会返回)。我现在正在寻找解决问题的替代方案。
有什么想法吗?
答案 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上的实际设备上遇到这种情况,无论如何其他人也报告过,所以问题仍然存在。