React native 如何使用async/await在react native中使用函数从AsyncStorage检索值

React native 如何使用async/await在react native中使用函数从AsyncStorage检索值,react-native,asyncstorage,React Native,Asyncstorage,我已经创建了prefsManager.js-用于存储和检索AsyncStorage中的数据,但是我遇到了一个问题,比如当打印日志时,它总是返回未定义的,因为它是异步的,但是我希望通过调用函数来打印日志中的实际值 import { AsyncStorage } from 'react-native'; import prefskey from '../utils/constants/prefskeys'; const setValue = async (key, value) => {

我已经创建了prefsManager.js-用于存储和检索AsyncStorage中的数据,但是我遇到了一个问题,比如当打印日志时,它总是返回未定义的,因为它是异步的,但是我希望通过调用函数来打印日志中的实际值

import { AsyncStorage } from 'react-native';
import prefskey from '../utils/constants/prefskeys';

const setValue = async (key, value) => {
    await AsyncStorage.setItem(key, value);
}

const getValue = async (key) => {
    let value = '';
    try {
        value = await AsyncStorage.getItem(key) || 'none';
    } catch (error) {
        // Error retrieving data 
        console.log(error.message);
    }
    return value;
};

const prefsmanager = {
    setValue,
    getValue
}
export default prefsmanager; 
当按下按钮调用此方法时,我在my Home.js中使用了此方法

_handlePress() {

        await prefsManager.setValue(prefskey.username, this.state.username)

        console.log("username =>>", await prefsManager.getValue(prefskey.username)); 

     }

您需要像这样在函数上使用async关键字

    import { AsyncStorage } from 'react-native';
import prefskey from '../utils/constants/prefskeys';

const prefsnamager = {

    setValue: function (key, value) {
        AsyncStorage.setItem(key, value)
    },

    getValue: async (key) => {
        let value = '';
        try {
            value = await AsyncStorage.getItem(key) || 'none';
        } catch (error) {
            // Error retrieving data
            console.log(error.message);
        }
        return value;
    }
}
export default prefsnamager;
调用函数

_handlePress = () => {
        prefsManager.setValue(prefskey.username, this.state.username)

        console.log("username =>>" , prefsManager.getValue(prefskey.username));

     }
  • 在存储器中设置值
  • AsyncStorage.setItem('data','Read data'))
    
  • 从存储中获取价值
  • 构造函数(道具){
    超级(道具)
    this.state={};
    让自我=这个;
    //每次访问此屏幕时,都会调用此函数。
    this.\uu didFocusSubscription=this.props.navigation.addListener('didFocus',payload=>{
    AsyncStorage.getItem('data')。然后((值)=>{
    如果(值==null){
    self.setState({count:'no data found'})
    }
    否则{
    self.setState({count:value})
    }
    })
    });       
    }
    
    事实上,它就像web中的
    localStorage
    ,但有一点不同。在获取项目时,它会异步操作。请注意以下几点:

    AsyncStorage.setItem('key', value);
    
    但在获得它的过程中如下所示:

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

    我不想在每个屏幕上都写,我只是从prefsmanager类调用函数并返回我作为参数传递的值。您可以在prefsmanager类中使用此函数,只需在函数中添加参数键并在任何位置调用它。我已经更新了我以前的答案,请看一看,它给了我syntex错误,没有函数关键字。我尝试过,但它在日志中打印像“username=>>”、{u40:0、{u65:0、{u55:null、{u72:null}。在getValue函数中使用胖箭头函数时,不需要“function”关键字,您需要传递参数“key”在像
    getValue=async(key)=>
    这样的getValue函数中,您需要将此行更改并更新为
    value=wait AsyncStorage.getItem(key)| |“none”我想在单独的文件中,我想从那里调用,而不是在每个屏幕中定义。我已经创建了prefsnamager.js,在这个文件中我定义了异步存储方法的Getter和Setter,我想通过将prefsnamager.js导入我的home.js并从prefsnamager.js调用函数进行设置和设置从偏好中获取价值。我们可以从那时开始回调并将其放到屏幕上吗?亲爱的@VishalPatoliyaツ, 这是什么意思?在
    内部,然后
    您可以传递回调函数并执行任何您想要的操作。在
    catch
    中,您可以传递回退功能,然后传递任何您想要的内容。