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 登录后不会重定向

React Native AsyncStorage ')' 以结束复合表达式

React Native 等待 AsyncStorage 获取值