异步函数在返回之前不等待等待

时间:2021-01-06 19:02:33

标签: javascript async-await

考虑以下代码:

const getName = () => 
  new Promise(resolve => setTimeout(resolve, 1000, 'xxx'));

f = async () => {
  let name = await getName();
  console.log(name);
  return name;
}

console.log(f());

函数会在打印“name”之前等待,但它仍然会返回promise而不是结果,并且不会在函数外打印正确的输出。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

您需要为 await f()。下面是一个例子:

const getName = () => 
  new Promise(resolve => setTimeout(resolve, 1000, 'xxx'));

const f = async () => {
  const name = await getName();
  console.log("1. "+name);
  return name;
}

const run = (async () => {
  const ret = await f();
  console.log("2. "+ret);
})();

答案 1 :(得分:1)

你需要等待f函数返回的promise。这就是为什么它打印承诺而不是结果。

console.log(await f());