【问题标题】:AsyncStorage.getItem() returns a single value AND a promiseAsyncStorage.getItem() 返回一个值和一个承诺
【发布时间】:2018-09-20 13:23:07
【问题描述】:

我正在尝试通过 AsyncStorage.setItem(KEY, VALUE); 获取设备中保存的单个值。

我有这个 localStorage.js 文件来管理本地数据

import React from 'react';
import { AsyncStorage } from 'react-native';

const storageSet = async(key, value) => {
    try {
      await AsyncStorage.setItem(key, value);
    } catch(error) {
      console.log(error);
    }
}

const storageGet = async(key) => {
  try {
       const result = await AsyncStorage.getItem(key);
       console.log(result);
       return result;
    } catch(error) {
      console.log(error);
    }
}

export { storageSet, storageGet };

login.js 文件中,我调用这些函数来传递参数。它保存正确。 但是当我尝试getItem() 值时,我有两个不同的回报,一个promise 和一个single value。关注:

console.log(result) whithin storageGet('key'),这就是我想要的。

57d7bc714b269533
1
ASUS_Z00AD
1.0
null
1

console.log(result) out storageGet('key') 函数。在 ma​​in.js 中,当我调用它时。

{login: "Hh", senha: "Hu", imei: Promise, tipo: Promise, modelo: Promise, …}
imei:
Promise {_40: 0, _65: 1, _55: **"57d7bc714b269533"**, _72: null}
login: "Hh"
mobile_key:
Promise {_40: 0, _65: 1, _55: **null**, _72: null}
mobile_push:
Promise {_40: 0, _65: 1, _55: **"1"**, _72: null}
modelo:
Promise {_40: 0, _65: 1, _55: **"ASUS_Z00AD"**, _72: null}
senha: "Hu"
tipo:
Promise {_40: 0, _65: 1, _55: **"1"**, _72: null}
versao:
Promise {_40: 0, _65: 1, _55: **"1.0"**, _72: null}
__proto__: Object

PS.:上面的一些项目没有从 getItem() 返回。

为什么它不只返回单个值?

【问题讨论】:

    标签: javascript react-native asyncstorage


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      由于storageGet 返回一个promise,你还需要在任何你使用它的地方使用await:

      const value = await storageGet(key);
      

      【讨论】:

      • 使用await只会产生以下错误TypeError: bundle.added is undefined[Learn More]
      • @Yokhen 这听起来像是一个与使用 await 无关的错误。
      • 是的,我认为这与 AsyncStorage 有关
      猜你喜欢
      • 2015-11-27
      • 2018-06-03
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2018-01-01
      相关资源
      最近更新 更多