如何使用await调用异步箭头功能

时间:2018-10-28 22:33:23

标签: javascript async-await

如果我定义这样的函数:

const getName = async () => await Promise.resolve('John');

当我尝试通过异步调用getName函数时:

const name = await getName();
console.log(`Hi ${name}`);

它抛出一个错误:

const name = await getName();
             ^^^^^

SyntaxError: await is only valid in async function

我做错了什么?

1 个答案:

答案 0 :(得分:3)

const getName = async () => await Promise.resolve('John');

在上面,您有一个异步函数(箭头函数),该函数在内部使用await

这很好(尽管没有意义,因为您可以直接返回承诺)。

这里:

const name = await getName();

您再次使用await,并且右侧的函数的确返回了promise,但它内部显示的函数不是async,因此无效。


将其放在异步函数中,就可以了:

const getName = async() => await Promise.resolve('John');

const init = async() => {
  const name = await getName();
  console.log(`Hi ${name}`);
};

init();

但是如上所述,将getName asyncawait放在里面只是一组不必要的嵌套承诺,您可以简化以下操作:

const getName = () => Promise.resolve('John');

const init = async() => {
  const name = await getName();
  console.log(`Hi ${name}`);
};

init();