16

我正在尝试检查密钥是否AsyncStorage可用AsyncStorage.getItem('key_name')。如果密钥不可用,它不会返回 null,它仍会返回以下 promise 对象:

Promise
_45:0
_54:null
_65:null
_81:1

我获取数据的功能如下:

checkItemExists(){
    let context = this;
    try {
        let value = AsyncStorage.getItem('item_key');
        if (value != null){
            // do something 
        }
        else {
            // do something else
        }
    } catch (error) {
    // Error retrieving data
    }
}

如何检查 AsyncStorage 中是否存在密钥?

4

4 回答 4

17

您需要添加异步等待,或将 .then 添加到结果中

async checkUserSignedIn(){
    let context = this;
    try {
       let value = await AsyncStorage.getItem('user');
       if (value != null){
          // do something 
       }
       else {
          // do something else
      }
    } catch (error) {
      // Error retrieving data
    }
}
于 2017-05-22T12:02:06.353 回答
8

顾名思义,它是异步的。所以你必须:

AsyncStorage.getItem('user')
.then((item) => {
     if (item) {
       // do the damage
     }
});

如果需要,您可以使用本地状态或某些应用程序状态管理库。

于 2017-05-22T12:00:57.697 回答
4

AsyncStorage 是异步的......所以,你需要这样称呼它:

checkUserSignedIn(callback){
  AsyncStorage.getItem('user', (err, result) => {
    if (!err && result != null){
        // do something 
    }
    else {
        // do something else
    }
    callback(result);
  });
}
于 2017-05-22T12:00:25.687 回答
0

你得到一个错误的承诺,因为你也需要await在你的函数调用中。例如,请找到我的普通班级以及稍后在另一个电话中如何称呼它。

import AsyncStorage from "@react-native-community/async-storage";

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 };

当我打电话给他们时,请注意await关键字

 let value = await storageGet("somekey")
 if (value === null || value === undefined ) {
   //no value set in storage
 }
于 2020-05-13T04:02:28.730 回答