React Native AsyncStorage getItem 返回承诺而不是值
Posted
技术标签:
【中文标题】React Native AsyncStorage getItem 返回承诺而不是值【英文标题】:React Native AsyncStorage getItem returns promise not value 【发布时间】:2017-01-11 11:27:10 【问题描述】:我有一个登录表单,我可以发布表单值。在成功的 POST 请求之后,我得到了从 API 返回的身份验证令牌。我需要将此令牌保存在本地存储中以供将来参考。为了保存这个身份验证令牌,我使用了 AsyncStorage。我使用AsyncStorage.setItem(STORAGE_KEY, responseData.auth_token);
setItem 方法保存数据。
如果我通过控制台记录:
console.log(AsyncStorage.setItem(STORAGE_KEY));
它像这样返回一个promise对象
Promise _45: 0, _81: 0, _65: null, _54: null
_45
:
0
_54
:
null
_65
:
"efcc06f00eeec0b529b8"
_81
:
1
__proto__
: 对象
如何从 AsyncStorage.getItem 方法中获取确切的值?
这是我的获取方法
fetch('http://54.255.201.241/drivers',
method: 'POST',
headers:
'Accept': 'application/json',
'Content-Type': 'application/json'
,
body: JSON.stringify(
first_name: this.state.firstName,
mobile_number: this.state.mobileNumber,
vehicle_number: this.state.vehicleNumber,
vehicle_type_id: 1,
)
).then((response) => response.json()).then((responseData) =>
if (JSON.stringify(responseData.mobile_number) == (this.state.mobileNumber))
AsyncStorage.setItem(STORAGE_KEY, responseData.auth_token);
console.log(AsyncStorage.getItem(STORAGE_KEY));
this.props.navigator.push(id: 'Otp')
else
Alert.alert("SignUp Failed","Mobile number already taken.")
)
.done();
顺便说一句,在他们使用 await 的文档中。我尝试使用它,但页面没有加载。这里附上截图。
【问题讨论】:
是的,只需使用then
,或者,如果您在async function
,请使用await
。
是 - 使用 then 或者如果你愿意:显示你的 fetch 调用,我们可以尝试帮助
【参考方案1】:
这就是我通常设法从本地存储中获取价值的方式:
const getItemFromStorage = async () =>
try
await AsyncStorage.getItem('ITEM_NAME', (error: any, result: any) =>
if (result)
console.log(result);
else
console.log(JSON.stringfy(error));
);
catch (error)
console.log(error);
【讨论】:
【参考方案2】:你必须调用
getUserToken().then(res =>
console.log(res);
);
因为这是一个异步调用。
【讨论】:
我认为这也应该是正确答案的一部分,因为在我的例子中,我将函数定义为异步但我没有在调用中使用 then。 这应该与最佳答案合并。我尝试正常调用该函数,但在我回到这里看到这个之前一直摸不着头脑。 是的,也就是_getStorageValue().then(res......)【参考方案3】:使用异步/等待:
async _getStorageValue()
var value = await AsyncStorage.getItem('ITEM_NAME')
return value
【讨论】:
以上是关于React Native AsyncStorage getItem 返回承诺而不是值的主要内容,如果未能解决你的问题,请参考以下文章
对react native 的AsyncStorage 进行小型封装
使用 React native 不推荐使用 AsyncStorage
React Native AsyncStorage 存储字符串以外的值
React Native React Navigation 屏幕在使用 AsyncStorage 登录后不会重定向