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);
添加回答
舉報