React Native - 返回 AsyncStorage 中的所有 JSON 数据?
Posted
技术标签:
【中文标题】React Native - 返回 AsyncStorage 中的所有 JSON 数据?【英文标题】:React Native - Return all JSON data in AsyncStorage? 【发布时间】:2018-06-20 00:57:46 【问题描述】:在我的 React Native 应用程序的 AsyncStorage 中,我有多个 JSON 对象,每个对象都有一个唯一的键 ID,如下所示:
'62834456':
data: "foo": "bar",
"nicknames": [ "grizz", "example" ],
... and so on
它们已被推送到字符串化的 AsyncStorage。我试图通过它们的 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 返回数组中的第一个字符串,数组本身,然后是第二个字符串。
【问题讨论】:
【参考方案1】:我不喜欢当前答案的一点是,它返回一个数组数组,这将使搜索特定键变得更加困难。这是我更喜欢使用的:
const getAll = async () =>
try
const result: any = ;
const keys = await AsyncStorage.getAllKeys();
for (const key of keys)
const val = await AsyncStorage.getItem(key);
result[key] = val;
return result;
catch (error)
alert(error);
;
这将返回一个对象,其中包含您拥有的所有键及其各自的值。
【讨论】:
【参考方案2】:可能是,使用 Promise 有点直截了当。
import AsyncStorage from 'react-native';
AsyncStorage.getAllKeys()
.then((keys)=> AsyncStorage.multiGet(keys)
.then((data) => console.log(data)));
干杯!
【讨论】:
【参考方案3】:要获取所有 AsyncStorage 密钥,您需要调用 AsyncStorage.getAllKeys()
。为了加快速度,你还应该使用AsyncStorage.multiGet()
这样你的代码就变成了;
importData = async () =>
try
const keys = await AsyncStorage.getAllKeys();
const result = await AsyncStorage.multiGet(keys);
return result.map(req => JSON.parse(req)).forEach(console.log);
catch (error)
console.error(error)
【讨论】:
所以在这种情况下似乎没有使用 id,我需要在将它传递给 importData() 之前在某处定义它吗? 这里的key是id,你可以使用普通的getItem,因为keys只是一个id数组并以这种方式连接它们。 感谢您的帮助。目前,我在解析后无法在控制台中显示内容。即在您的示例中,如果我使用 console.log(req),则不会显示任何内容,甚至不会显示通用对象响应,控制台为空白。这不是在解析后查看这些对象的正确方法吗? 你能检查一下钥匙里有什么吗?也许还没有任何设置。 为什么要混合 async / await 与 then 和回调?为什么不像@georgekpc 的回答那样一路走好?【参考方案4】:返回 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')
【讨论】:
【参考方案5】:这是使用 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")
【讨论】:
以上是关于React Native - 返回 AsyncStorage 中的所有 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章
使用 react-navigation 禁用返回 react-native
react-native-contacts getAll 返回 null