在我的React Native应用程序的AsyncStorage中,我有多个JSON对象,每个对象都有一个唯一的密钥ID,如下所示:
'62834456':
data: { "foo": "bar",
"nicknames": [ "grizz", "example" ],
... and so on }
他们已被推入AsyncStorage字符串化。我试图通过他们的id检索每个对象,然后同时推送id和它的id。 JSON数据进入组件的状态。到目前为止我有这个:
// for every key in async storage, push to favorites in state
importData = (id) => {
for (id in AsyncStorage) {
return AsyncStorage.getItem(id)
.then(req => JSON.parse(req))
.then(json => console.log(json))
.catch(error => console.log('error!'));
}
}
当console.logging' json'在上面的函数中,结果为null。如何正确访问AsyncStorage中的所有JSON对象?
最终编辑
使用您的代码示例并删除JSON.parse(所以简单的console.logging req)返回:
看来这种情况正在发生,因为某种原因.forEach返回数组中的第一个字符串,数组本身,然后是第二个字符串。
答案 0 :(得分:4)
要获取所有AsyncStorage密钥,您需要致电AsyncStorage.getAllKeys()
。为了加快速度,您还应该使用AsyncStorage.multiGet()
这样做,您的代码就变成了;
importData = (id) => {
AsyncStorage.getAllKeys.then((keys) => {
return AsyncStorage.multiGet(keys)
.then((result) => {
result.map(req => JSON.parse(req)).forEach(console.log);
});
});
}
答案 1 :(得分:0)
这是一种使用async / await函数获取所有项目的更优雅的方法
const fetchAllItems = async () => {
try {
const keys = await AsyncStorage.getAllKeys()
const items = await AsyncStorage.multiGet(keys)
return items
} catch (error) {
console.log(error, "problemo")
}
}
答案 2 :(得分:0)
用于返回json对象的代码
try {
const keys = await AsyncStorage.getAllKeys()
const itemsArray = await AsyncStorage.multiGet(keys)
let object = {}
itemsArray.map(item => {
object[`${item[0]}`] = item[1]
})
return object
} catch (error) {
console.log(error, 'error')
}
答案 3 :(得分:0)
也许会,使用诺言的直截了当。
import { AsyncStorage } from 'react-native';
AsyncStorage.getAllKeys()
.then((keys)=> AsyncStorage.multiGet(keys)
.then((data) => console.log(data)));
干杯!
答案 4 :(得分:0)
我不喜欢当前答案的地方是它返回了一个数组数组,这将使搜索特定键变得更加困难。这是我更喜欢使用的:
conn.load_extenstion(PATH_TO_EXTENSION)
这将返回具有所有键及其各自值的对象。