如何使用 async/await 通过函数从 React Native 中的 AsyncStorage 检索值
How to use async/await to retrieve value from AsyncStorage in react native by using function
我已经创建了 prefsManager.js - 用于从 AsyncStorage 存储和检索数据,但是我遇到了一个问题,比如打印日志时它 return 总是未定义,因为它是异步的,但我想打印函数调用在日志中的实际值。
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;
我在我的 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')
- 从存储中获取价值
constructor(props) {
super(props)
this.state = {};
let self=this;
//this function is called everytime , when you visit this screen.
this.__didFocusSubscription = this.props.navigation.addListener('didFocus',payload => {
AsyncStorage.getItem('data').then((value)=>{
if(value==null){
self.setState({count:'no data found'})
}
else{
self.setState({count:value})
}
})
});
}
实际上,它与网络中的 localStorage
类似,但略有不同。在获取它异步操作的项目时。关注以下:
AsyncStorage.setItem('key', value);
但是在获取过程中是这样的:
AsyncStorage.getItem('key')
.then( value => console.log(value) );
我已经创建了 prefsManager.js - 用于从 AsyncStorage 存储和检索数据,但是我遇到了一个问题,比如打印日志时它 return 总是未定义,因为它是异步的,但我想打印函数调用在日志中的实际值。
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;
我在我的 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')
- 从存储中获取价值
constructor(props) {
super(props)
this.state = {};
let self=this;
//this function is called everytime , when you visit this screen.
this.__didFocusSubscription = this.props.navigation.addListener('didFocus',payload => {
AsyncStorage.getItem('data').then((value)=>{
if(value==null){
self.setState({count:'no data found'})
}
else{
self.setState({count:value})
}
})
});
}
实际上,它与网络中的 localStorage
类似,但略有不同。在获取它异步操作的项目时。关注以下:
AsyncStorage.setItem('key', value);
但是在获取过程中是这样的:
AsyncStorage.getItem('key')
.then( value => console.log(value) );