javascript - 如何使用 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
我做错了什么?
解决方案
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
async
和await
ing inside 只是一组不必要的复杂嵌套承诺,您可以简化:
const getName = () => Promise.resolve('John');
const init = async() => {
const name = await getName();
console.log(`Hi ${name}`);
};
init();
推荐阅读
- mongodb - Mongodb compass一直显示激活插件
- regex - 用于查找 1 个反引号和 3 个反引号的匹配组的正则表达式
- visual-studio-code - 如何使用 vs code 管理分散的文件?
- ruby - 如何使用 Puppet 因子在 Windows 2008 R2 中导入模块?
- android - 覆盖工作管理器的截止日期 (Android Studio)
- swift - CABasicAnimation 在非圆形上模拟“脉冲”效果动画
- c - C语言中的布尔值
- php - Unicode 正在编码 CURL PHP
- r - R Shiny 没有响应输入
- mysql - MySQL使用计数器更新排序顺序列