【问题标题】:React Native - How do I return a value from a async function? [duplicate]React Native - 如何从异步函数返回值? [复制]
【发布时间】:2021-10-18 17:27:02
【问题描述】:

我是本机反应的新手,我正在尝试编写一个异步函数,该函数调用一个 API 端点,该端点接受一个 id 并从函数返回 API 的结果。

这是我的代码的示例 sn-p:

async function returnAValue(funcId) {
  let returnValueFromAPI = false;
  if (funcId !== null) {
    try {
      const response = await Api.get(
        "/metrics-result/hasRecordedToday/" + funcId
      );
      returnValueFromAPI = response.data;
      console.log("returnValueFromAPI 1", returnValueFromAPI);
      // here the correct value of true is logged "returnValueFromAPI 1 true"
    } catch (error) {
      console.log(error.response);
    }
  }
  return returnValueFromAPI;
}

console.log("func return value", returnAValue("3456"));
// outside the function above console log returns 'func return value' {"_U": 0, "_V": 0, "_W":  null, "_X": null}

有人可以解释为什么它不会在函数外的 console.log 中返回“true”值吗?

任何帮助将不胜感激

【问题讨论】:

  • async 函数总是返回承诺。要获取 promise 最终解析为的值,请使用 promise 的 .then 方法或 await promise。
  • 无论如何我可以从函数内部的promise中提取值并返回实际值?我可以使用 returnAValue('345').then(function(val) {console.log(val)}) 获取函数外部的值......
  • 基本上我需要能够调用一个函数,传入一个值并取回实际结果(不是承诺)并检查结果。任何帮助将不胜感激?
  • 不可能返回一个尚不存在的值。 Promise 的全部意义在于它们代表了一个 future 值。 .thenawait 是您可以告诉承诺“当值准备好时,运行此代码”的方式。任何需要该值的代码都必须在 .then 回调内或 await 之后。
  • 除此之外,我需要在 .map 中调用异步函数,因此对于 .map 中的每个项目,我需要检查 API 的结果,并根据结果,真/假呈现不同的样式按钮。我理解 .then() 但它在 .map 逻辑中使用它,因为我不断收到错误。

标签: javascript reactjs react-native react-redux react-router


【解决方案1】:

您需要记住,对 API 的调用是已处理的事情,但您不知道将来会在什么时候出现,您只知道您会得到结果或错误。

检查那些资源也搜索回调地狱,或承诺地狱。 async/await 更容易阅读。

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

【讨论】:

  • 好的,您发送的第一个链接我明白 - 谢谢。我现在可以控制台记录来自 .then 块的正确值。但是,我需要能够访问 .then 块的外部/全局值以及使用它的函数。我不能使用 setState!我可以知道如何从 .t​​hen 块函数返回值吗?
  • 组合使用 useEffect 和 useState 这样你就可以访问该值,但是老兄你也可以使用 HTTP 客户端,但是如果你正在学习它可以使用你正在采用的方法 react-query.tanstack.com reactjs.org/docs/hooks-effect.html
猜你喜欢
  • 2021-02-13
  • 2016-01-14
  • 1970-01-01
相关资源
最近更新 更多