React native 如何使用async/await在react native中使用函数从AsyncStorage检索值
我已经创建了prefsManager.js-用于存储和检索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) => {
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
中,您可以传递回退功能,然后传递任何您想要的内容。