2 回答
TA贡献1921条经验 获得超9个赞
你不能。Usingasync意味着你的函数实际上包装了一个 Promise。所以globalinvar global = getUser()是一个承诺。您可以在异步函数中等待,也可以使用.then().
如果你希望代码看起来是同步的,你可以有一个 main 函数,然后调用 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 的承诺可能还没有完成,所以它是未解决的承诺。你应该只在明确等待(await或then'd)承诺时使用它。此外,全局变量在任何编程语言中都不是很好,包括javascript。
TA贡献1804条经验 获得超8个赞
您可以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);
添加回答
举报