【问题标题】:How to check if a key exists in AsyncStorage in React Native? getItem() always returns a promise object如何检查 React Native 中的 AsyncStorage 中是否存在密钥? getItem() 总是返回一个承诺对象
【发布时间】:2017-05-22 11:57:33
【问题描述】:

我正在尝试检查AsyncStorageAsyncStorage.getItem('key_name') 中的密钥是否可用。如果 key 不可用,它不会返回 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 中是否存在密钥?

【问题讨论】:

    标签: javascript react-native react-native-android asyncstorage


    【解决方案1】:

    你需要添加异步等待,或者将 .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
        }
    }
    

    【讨论】:

    • 好答案,这与问题无关,但是当变量的值不会被重新分配时,您应该使用const 而不是letlet 最好在变量可以重新分配但不能修改的情况下使用,const 在既不能重新分配也不能修改的情况下使用。
    • @YungGun 如果对我来说,我的意图只是展示如何从 asyncstorage 和其他我刚刚从 OP 代码中复制的东西中获取价值。无论如何,好点。
    • @SagarKhatri 当我使用此代码时出现这样的错误“等待是保留字”> 61 |让 value1 = 等待 AsyncStorage.getItem('DriverId'); | ^ 62 |让 value2 = 等待 AsyncStorage.getItem('AccessToken'); 63 | console.log(value1 + " "+ value2) 64 | this.props.navigation.navigate('登录');
    • @SrinivasanLakshmanan 你需要在函数之前将它与异步一起使用..你能分享你的代码吗?
    【解决方案2】:

    正如名字所说,它是异步的。所以你必须:

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

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

    【讨论】:

      【解决方案3】:

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

      checkUserSignedIn(callback){
        AsyncStorage.getItem('user', (err, result) => {
          if (!err && result != null){
              // do something 
          }
          else {
              // do something else
          }
          callback(result);
        });
      }
      

      【讨论】:

        【解决方案4】:

        你得到一个错误的承诺,因为你的函数调用中也需要有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
         }
        

        【讨论】:

          猜你喜欢
          • 2017-01-11
          • 2018-09-16
          • 2018-04-14
          • 2019-11-23
          • 2019-01-30
          • 1970-01-01
          • 2019-12-02
          • 2018-09-26
          • 1970-01-01
          相关资源
          最近更新 更多