[英]Async function returns a promise.How to make the promise value global?
我有一个异步 function,它返回一个 promise。 我对如何访问 Promise 值感到困惑。 我遇到了.then()
。 它适用于.then()
,但我想让 promise 值全局化。 如果我使用.then()
这是不可能的。
这是我的代码:
async function getUser() {
try {
response = await axios.post('/',data);
}
catch (error) {
console.error(error);
}
return response.data;
}
var global = getUser();
console.log(global);
此处的代码返回 promise,如下所示:
我想知道如何访问 Promise 值(我们可以在图像中看到)并使其全局化? 我是 JavaScript 的新手,无法理解异步函数。
你不能。 使用async
意味着您的 function 实际上将 promise 包裹在它周围。 所以 var global
var global = getUser()
中的 global 是 promise。 您可以在异步 function 中等待或使用 .then .then()
。
如果你想让代码看起来是同步的,你可以有一个主 function,然后调用 main 'globally':
async function main() {
// because main is an async function, it can unwrap the promise
const user = await getUser();
console.log({user});
}
main();
您不应该尝试“全局”使用user
,而只能在main
中使用它。 这是因为 getUser 的 promise 可能还没有完成,所以它会是未解决的 promise。 您应该只在明确等待( await
或then
'd)promise 时使用它。 此外,全局变量在任何编程语言中都不是很好,包括javascript 。
您可以像这样设置global
值:
var global;
getUser().then(user => global = user);
function getUser() { return Promise.resolve("User #1"); } var global; getUser().then(user => global = user); console.log("1", global); setTimeout(() => console.log("2", global), 500);
但是请记住,其他同步代码不知道何时设置了global
变量。 在调用回调之前,该值将是undefined
的。 更好的选择可能是您已经在做的事情:
var global = getUser();
这样,其他同步代码可以通过执行以下操作附加回调:
global.then(user => {
// ...
});
function getUser() { return Promise.resolve("User #1"); } var global = getUser(); global.then(user => console.log("1", user)); setTimeout(() => { global.then(user => console.log("2", user)); }, 500);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.