ReactNative:AsyncStorage 问题:我无法正确检索数据
ReactNative: AsyncStorage Problem : I can't retrieve Data the correctly
我正在尝试通过使用 setItem()
将令牌保存到 AsyncStorage 来在我的项目中使用 AsyncStorage
使用令牌响应的操作
import axios from 'axios';
import {URL, Config} from '../../service/Api';
import AsyncStorage from '@react-native-async-storage/async-storage';
export const checkSmsToLoginUser = value => async dispatch => {
dispatch({type: 'USER_LOGIN_REQUEST'});
try {
const {data} = await axios.post(`${URL}user/checkSMSCode`, value, Config);
console.log(data.token); // it consoles the token
await AsyncStorage.setItem('USER_TOKEN', data.token);
dispatch({type: 'USER_LOGIN_SUCCESS', payload: data?.token});
} catch (error) {
dispatch({type: 'USER_LOGIN_ERROR', payload: error});
}
};
然后我在组件中分派操作,然后我尝试使用 getItem
从 AsyncStorage 获取令牌
const getData = async () => {
try {
const token = await AsyncStorage.getItem('USER_TOKEN');
return token, JSON.parse(token);
} catch (error) {
return error;
}
};
console.log(getData(), 'token From AsyncStorage');
但是当我控制来自 AsyncStorage 的令牌时,我有一些未处理的承诺
有什么问题或解决方案的线索吗?
您正在打印异步函数而不等待它。
代码正确,但控制台日志不正确:
console.log(getData(), 'token From AsyncStorage'); // missing async logic
在 getData 函数中插入控制台日志,或等待响应。
这可能有帮助
function App() {
const getData = async () => {
try {
const token = await AsyncStorage.getItem('USER_TOKEN');
// Log here
console.log(JSON.parse(token), 'token From AsyncStorage');
} catch (error) {
return error;
}
};
useEffect(() => {
getData(); // call here
}, []);
return (
<View>
...
</View>
);
}
通过在 UseEffect
中添加 getData()
并使用 then().catch()
处理承诺对我有用
useEffect(() => {
getData()
.then(res => {
console.log(res, 'it worked');
setToken(res);
})
.catch(err => {
setError(err);
console.log(err);
});
}, []);
我正在尝试通过使用 setItem()
使用令牌响应的操作
import axios from 'axios';
import {URL, Config} from '../../service/Api';
import AsyncStorage from '@react-native-async-storage/async-storage';
export const checkSmsToLoginUser = value => async dispatch => {
dispatch({type: 'USER_LOGIN_REQUEST'});
try {
const {data} = await axios.post(`${URL}user/checkSMSCode`, value, Config);
console.log(data.token); // it consoles the token
await AsyncStorage.setItem('USER_TOKEN', data.token);
dispatch({type: 'USER_LOGIN_SUCCESS', payload: data?.token});
} catch (error) {
dispatch({type: 'USER_LOGIN_ERROR', payload: error});
}
};
然后我在组件中分派操作,然后我尝试使用 getItem
const getData = async () => {
try {
const token = await AsyncStorage.getItem('USER_TOKEN');
return token, JSON.parse(token);
} catch (error) {
return error;
}
};
console.log(getData(), 'token From AsyncStorage');
但是当我控制来自 AsyncStorage 的令牌时,我有一些未处理的承诺
有什么问题或解决方案的线索吗?
您正在打印异步函数而不等待它。
代码正确,但控制台日志不正确:
console.log(getData(), 'token From AsyncStorage'); // missing async logic
在 getData 函数中插入控制台日志,或等待响应。
这可能有帮助
function App() {
const getData = async () => {
try {
const token = await AsyncStorage.getItem('USER_TOKEN');
// Log here
console.log(JSON.parse(token), 'token From AsyncStorage');
} catch (error) {
return error;
}
};
useEffect(() => {
getData(); // call here
}, []);
return (
<View>
...
</View>
);
}
通过在 UseEffect
中添加 getData()
并使用 then().catch()
处理承诺对我有用
useEffect(() => {
getData()
.then(res => {
console.log(res, 'it worked');
setToken(res);
})
.catch(err => {
setError(err);
console.log(err);
});
}, []);