繁体   English   中英

异步 function 返回 promise。如何使 promise 值全局化?

[英]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。 您应该只在明确等待( awaitthen '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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM