当我使用AsyncStorage.getItem()来检索指定键的值时,它返回一个Promise对象作为String而不是Object

时间:2017-05-29 16:29:57

标签: react-native promise

存储异议是:

{
 name: 'Chris',
 age: 30,
 traits: {
    hair: 'brown',
    eyes: 'brown'
  },
};

无法检索value.propertyName。

AsyncStorage.getItem('key').then( (value) => console.log('value ', value, 'name is ', value.name));

输出为:值{“name”:“Chris”,“age”:30,“traits”:{“hair”:“brown”,“eyes”:“brown”}} name is undefined

请告诉我如何从承诺对象中检索特定值

3 个答案:

答案 0 :(得分:9)

AsyncStorage 仅将数据保存为字符串。您只需在保存时使用JSON.stringify(),在检索时使用JSON.parse()

例如:

AsyncStorage.getItem('key')
.then((value) => {
  const data = JSON.parse(value);
  console.log('name is ', data.name);
});

另一种选择是为AsyncStorage使用某种包装器,它可以为您执行此操作,例如:https://github.com/jasonmerino/react-native-simple-store

答案 1 :(得分:0)

Fore GetItem: const data = JSON.parse(await AsyncStorage.getItem('DataEnable')); this.setState({dataenable_user:data})

对于SetItem: 等待asyncStorage.setItem('DataEnable',JSON.stringify(this.state.dataenable_user));

答案 2 :(得分:0)

您可以将值设置为以下

    async setAsyncStorage (key, value) {
        try {
          await AsyncStorage.setItem(key, JSON.stringify(value));
        } catch (error) {
          console.warn(error);
        }
      }

并获得以下信息:

    async getAsyncStorage (key) {
        try {
          const getAsyncStorageData = await AsyncStorage.getItem(key);
          const getAsyncStorageParsed = JSON.parse(getAsyncStorageData);
          return getAsyncStorageParsed;
        } catch (error) {
          console.warn(error);
        }
      }