亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

異步函數返回一個promise。如何使promise 值全局化?

異步函數返回一個promise。如何使promise 值全局化?

尚方寶劍之說 2022-07-08 10:19:25
我有一個返回承諾的異步函數。我對如何訪問 Promise 值感到困惑。我遇到了.then()。它適用于.then(),但我想讓承諾值全球化。如果我使用這是不可能的.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 值(我們可以在圖像中看到)并使其全局化?我是 JavaScript 新手,無法理解異步函數。
查看完整描述

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。


查看完整回答
反對 回復 2022-07-08
?
胡說叔叔

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);


查看完整回答
反對 回復 2022-07-08
  • 2 回答
  • 0 關注
  • 418 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號