Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查React Native中的异步存储中是否存在密钥?getItem()始终返回承诺对象_Javascript_React Native_React Native Android_Asyncstorage - Fatal编程技术网

Javascript 如何检查React Native中的异步存储中是否存在密钥?getItem()始终返回承诺对象

Javascript 如何检查React Native中的异步存储中是否存在密钥?getItem()始终返回承诺对象,javascript,react-native,react-native-android,asyncstorage,Javascript,React Native,React Native Android,Asyncstorage,我正在尝试使用AsyncStorage.getItem('key\u name')检查AsyncStorage中是否有密钥可用。如果密钥不可用,则不会返回null,它仍会返回以下承诺对象: Promise _45:0 _54:null _65:null _81:1 我获取数据的功能如下: checkItemExists(){ let context = this; try { let value = AsyncStorage.getItem('item_key'

我正在尝试使用
AsyncStorage.getItem('key\u name')
检查
AsyncStorage
中是否有密钥可用。如果密钥不可用,则不会返回null,它仍会返回以下承诺对象:

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中是否存在密钥?

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

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

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

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

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

您需要添加async await,或添加。然后添加到结果中

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

由于函数调用中也需要有
wait
,因此会得到一个作为错误的承诺。例如,请在以后的另一次调用中查找我的普通类以及如何调用它

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 };
当我打电话给他们时,记下
wait
关键字

 let value = await storageGet("somekey")
 if (value === null || value === undefined ) {
   //no value set in storage
 }

回答得很好,这与问题无关,但是当变量的值不会被重新赋值时,应该使用
const
而不是
let
let
最好在变量可以重新分配但不修改时使用,
const
在变量既不重新分配也不修改时使用。@YungGun如果对我来说,我的目的只是展示如何从asyncstorage和我刚从OP代码复制的其他内容中获取值。无论如何,这一点很好。@SagarKhatri在使用代码“wait是一个保留字”>61 | let value1=wait AsyncStorage.getItem('DriverId');|^时遇到了这样的错误62 | let value2=等待AsyncStorage.getItem('AccessToken');63 | console.log(value1+“”+value2)64 | this.props.navigation.navigate('Login')@SrinivasanLakshmanan在函数之前,您需要将其与async一起使用。。你能分享你的代码吗?