【问题标题】:How to return a value from an Async function and declare it as global [duplicate]如何从异步函数返回值并将其声明为全局 [重复]
【发布时间】:2021-10-22 20:06:57
【问题描述】:

我已经阅读了几个关于这个问题的 stackoverflow 问题和答案,但似乎没有一个能解决我的问题。

我在 React Native 应用程序中使用 Async/await 函数,并尝试从 AsyncStorage 访问数据。我正在尝试使用 .getItem 获取一个值,然后在异步函数之外使用它。这是我用来获取数据的函数。

async _getStorageValue(){
  var value = await AsyncStorage.getItem('ITEM_NAME')
  return value
}

但是,当我调用此函数并将其设置为变量时,如下所示:

returnedValue = _getStorageValue()

返回一个承诺:

Promise {
  "_U": 0,
  "_V": 0,
  "_W": null,
  "_X": null,
}

如何在不使用 useState 挂钩的情况下访问此异步函数中的值?

【问题讨论】:

  • let value; _getStorageValue().then(v => value = v) 将是如何做到这一点(声明一个全局,在承诺解决时填充它)。但是,同时依赖于该全局填充的代码可能会失败,因此最好将您的代码包装在 async function 中并执行 const value = await _getStorageValue();,这将暂停该代码的执行,直到值被解析。
  • “不使用 useState 钩子” - 你在使用基于类的组件吗?如果不是,那么不,你不能在没有 useState 钩子的情况下使用来自异步函数的值。

标签: javascript react-native async-await asyncstorage


【解决方案1】:

将您的全局函数更改为

_getStorageValue(){
  return AsyncStorage.getItem('ITEM_NAME')
}

并在存储时进行异步调用

returnedValue = await _getStorageValue()

【讨论】:

    【解决方案2】:

    我不完全确定,但我认为你想要这个:

        async _getStorageValue(){
         var value = await AsyncStorage.getItem('ITEM_NAME').then((val) => val)
        }
    

    then 关键字确保等待 promise 解决。 注意:promise 也可能失败,目前我不确定如何处理。

    【讨论】:

    • 请注意,这并不能回答如何在没有 useState 钩子的情况下在反应组件中使用该值。
    猜你喜欢
    • 2021-05-30
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多