如果我定义这样的函数:
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
我做错了什么?
答案 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
async
和await
放在里面只是一组不必要的嵌套承诺,您可以简化以下操作:
const getName = () => Promise.resolve('John');
const init = async() => {
const name = await getName();
console.log(`Hi ${name}`);
};
init();