javascript - 如何使用 asyncStorage 从本地存储中获取值并返回
问题描述
我想创建一个方法,该方法从存储在本地存储中的令牌返回身份验证标头,以便可以从许多 ajax 调用它,如下所示:
const fetchUserInfo = (username) => {
const requestString = apiBaseURL + 'access/user_info/'
const form = {username: username}
return axios.post(requestString, form, getAuthHeader())
.then((Response) => {
return {
userInfo: Response.data,
message: null
}
})
.catch((Error) => {
return getErrorMessage();
});
}
在这种情况下,getAuthHeader()
是一种必须从存储在本地存储中的令牌返回正确授权标头的方法,因此必须使用它asyncStorage
来检索此类令牌。
这是代码getAuthHeader
:
export const getAuthHeader = async () => {
return await AsyncStorage.getItem('token')
.then ((token) => {
return {
headers: {'Authorization' : 'Token ' + token}
}
})
.catch ((error) => null)
}
问题是getAuthHeader()
不是返回标题而是返回一些其他对象。我相信我搞砸了 的异步性质asyncStorage
,但我不知道如何获得我需要的价值。
解决方案
是的,您正在一起使用async/await
和.then
(本机)。async/await
已经为您处理了.then
语法,而您不必这样做。所以你不需要两者都在一起,它是 1 或另一个。下面的两个例子。
异步/等待:
export const getAuthHeader = async () => {
try {
const token = await AsyncStorage.getItem('token')
if (!token) { return null }
return {
headers: {'Authorization' : 'Token ' + token}
}
} catch(error) { return null }
}
本国的
export const getAuthHeader = () => {
return AsyncStorage.getItem('token')
.then((token) => {
if (!token) { return null }
return {
headers: {'Authorization' : 'Token ' + token}
}
})
.catch ((error) => null)
}
您还需要getAuthHeader
在第一种方法中等待,否则它将永远无法解析该值:
const fetchUserInfo = async (username) => {
const requestString = apiBaseURL + 'access/user_info/'
const form = {username: username}
try {
const response = await axios.post(requestString, form, await getAuthHeader())
return {
userInfo: response.data,
message: null
}
} catch(error) {
return getErrorMessage();
}
}
推荐阅读
- c# - C# Windows 窗体 DataGridView:不显示水平滚动
- elasticsearch - 在 Elasticsearch 中对索引调用 _search API 时出错
- python - 是否设置`torch.backends.cudnn.benchmark = True`?
- c - 为什么 sprintf() 会生成问号字符作为输出?
- r - 如何使用每月日期设置 geom_rect() xmin 和 xmax 以便它们接触但不重叠?
- r - R barplot + sapply 洗牌(虽然不应该)
- php - PHP 中的依赖注入 (slim, php-di)
- r - R为频率的pdf输出添加标题
- c++ - 带有和不带有主体的 C++ 部分构造函数的行为不同
- java - 如何多次运行while循环