等待不等待函数结束

时间:2019-02-07 21:47:20

标签: node.js async-await

我是javascript的新手,我试图实现我的第一个异步等待,无法弄清楚我的问题在哪里。

getName()-应该在1秒后返回一个承诺。 f()-应该等待getName完成,然后打印名称

我想念什么?

const getName = async () => {
  setTimeout(() => 'xxx', 1000)
};

const f = async () => {
  name = await getName()
  console.log(name)
}

f()

2 个答案:

答案 0 :(得分:4)

除非您还在await内使用getName,否则不需要使getName异步,只需要返回一个Promise;因为await符合诺言:

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

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

f();

答案 1 :(得分:2)

要等待一个函数,该函数必须返回一个promise。

因此,您需要创建一个新的承诺。它将有2种方法:resolvereject

  1. resolve返回变量,并在成功时使用。您可以使用promise.then(value => )await对其进行捕捉。
  2. reject引发错误,并用于错误。您可以通过使用promise.catch(err => )或等待异步功能并将其包装在try-catch块中来捕获错误。

这是代码的外观:

const getName = async () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('xxx');
    }, 1000)
  })
};

const f = async () => {
  name = await getName()
  console.log(name)
}

f()