React Native - 返回AsyncStorage中的所有JSON数据?

时间:2018-01-10 19:10:16

标签: json reactjs asynchronous react-native asyncstorage

在我的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)返回: enter image description here

看来这种情况正在发生,因为某种原因.forEach返回数组中的第一个字符串,数组本身,然后是第二个字符串。

5 个答案:

答案 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)

这将返回具有所有键及其各自值的对象。