getItem 为啥返回 'Promise "_U": 0, "_V": 0, "_W": null, "_X": n

Posted

技术标签:

【中文标题】getItem 为啥返回 \'Promise "_U": 0, "_V": 0, "_W": null, "_X": null, \'【英文标题】:getItem why returned 'Promise "_U": 0, "_V": 0, "_W": null, "_X": null, 'getItem 为什么返回 'Promise "_U": 0, "_V": 0, "_W": null, "_X": null, ' 【发布时间】:2022-01-14 13:30:11 【问题描述】:

我是新手反应原生,我正在使用异步和等待仍然为什么我得到这个错误

我的代码:

const getItemFromStorage = async () => 
  try 
       await AsyncStorage.getItem('USER_NAME', (error: any, result: any) => 
         if (result) 
           console.log(result);
         else
           console.log(JSON.stringfy(error));
         
       );
      catch (error) 
       console.log(error);
     

用法;

<Text style=styles.text>JSON.stringify(getItemFromStorage, null, 4)</Text>

结果;


    "_U": 0,
    "_V": 0,
    "_W": null,
    "_X": null

【问题讨论】:

看看这个,可能是同一个问题:***.com/questions/70286237/… 很遗憾这并没有解决我的问题,现在结果返回空白。 【参考方案1】:

如果您存储了字符串化的 JSON,请尝试这样的操作;

getItemFromStorage = async ()  => 
        try 
          const jsonValue = await AsyncStorage.getItem('USER_NAME');
          let data = jsonValue != null ? JSON.parse(jsonValue) : null;
          console.log(data); 
  

如果你存储了一个简单的字符串,试试这个;

let username = '';
getItemFromStorage = async ()  => 
      try 
        AsyncStorage.getItem('USER_NAME').then(result => 
          console.log(result);
          username = result;
        )
        
       catch(e) 
        // Handle error
      
    

您遇到的问题是没有解决返回的 Promise。这可能是如果您在进程完成之前 console.log (可能,所以请查看我发送的第二个代码库部分),否则您存储了一个对象(字符串化)并尝试将其作为字符串读取而没有先正确解析它。

编辑

<Text style=styles.amountFiat>this.username</Text>

【讨论】:

感谢您的帮助,但这产生了一个空结果。我将它与 android studio 一起使用。我没有使用 console.log 得到结果,所以我使用了 return。 console.log(result); 而不是 return result;,我也在尝试在页面上打印传入的值; &lt;Text style=styles.text&gt;getItemFromStorage&lt;/Text&gt; 以上应该可以,真的。它几乎是我从事的一个项目的复制和粘贴,并且可以正常工作。你存的是什么,能不能展示一下setItem函数? 我只存储字符串值,而不是 json。我需要这个的价值。 await AsyncStorage.setItem('USER_NAME', username);我是不是打错电话了? &lt;Text style=styles.amountFiat&gt;this.getAsyncData&lt;/Text&gt; 好的 - 我在上面更新了我的答案。尝试将返回的用户名存储在一个变量中,全局创建这个变量,然后在你的 Text 组件中像上面一样更新它。 感谢回复,已解决。

以上是关于getItem 为啥返回 'Promise "_U": 0, "_V": 0, "_W": null, "_X": n的主要内容,如果未能解决你的问题,请参考以下文章

为啥,如果 `$q.all` 没有返回一个 promise 数组,那么不会抛出异常?

为啥在使用promise时使用Q,bluebird框架? [复制]

为啥在使用 Promise 时在类方法中未定义“this”? [复制]

为啥 fetch 返回 promise 未决?

为啥 Body.json() 返回一个 Promise? [复制]

当异步函数不应该返回 Promise 时,为啥我需要等待它?