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