猿问

异步函数返回一个promise。如何使promise 值全局化?

我有一个返回承诺的异步函数。我对如何访问 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 新手,无法理解异步函数。

尚方宝剑之说
浏览 396回答 2
2回答

郎朗坤

你不能。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。

胡说叔叔

您可以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);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答