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

Car*_*los 1 javascript async-await

如果我定义这样的函数:

const getName = async () => await Promise.resolve('John');
Run Code Online (Sandbox Code Playgroud)

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

const name = await getName();
console.log(`Hi ${name}`);
Run Code Online (Sandbox Code Playgroud)

它抛出一个错误:

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

SyntaxError: await is only valid in async function
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Que*_*tin 5

const getName = async () => await Promise.resolve('John');
Run Code Online (Sandbox Code Playgroud)

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

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

这里:

const name = await getName();
Run Code Online (Sandbox Code Playgroud)

await再次使用时,尽管右侧的函数确实返回了promise,但是它出现在内部的函数无效,async因此无效。


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

const getName = async () => await Promise.resolve('John');
Run Code Online (Sandbox Code Playgroud)

如前所述,在内部进行创建getName asyncawait嵌套只是一组不必要的嵌套承诺,您可以简化以下操作:

const name = await getName();
Run Code Online (Sandbox Code Playgroud)