首页 > 解决方案 > 如何使用 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

我做错了什么?

标签: javascriptasync-await

解决方案


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

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

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

这里:

const name = await getName();

await再次使用,虽然右侧的函数确实返回了一个承诺,但它出现在里面的函数不是async,所以它是无效的。


把它放在一个异步函数中就可以了:

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

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

init();

如前所述,makegetName asyncawaiting inside 只是一组不必要的复杂嵌套承诺,您可以简化:

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

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

init();


推荐阅读