ES6 async函数里包含另一个async函数是为什么?
今天在看一个大佬的github项目,他在写登录函数的时候是这样写的:
async login(req, res, next){
const form = new formidable.IncomingForm();
form.parse(req, async (err, fields, files) => {
/...some code
})
}
他这里是两个async,这里为啥写两个啊,只写外面一个总的不行吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
async 是函数的一种类型,每一个都要写,不写就不是。
并不是说 async 函数里定义的函数就是 async 函数。
如果只有外层函数是
async
函数的话,内层函数里写的await
会报语法错误。可以简单粗暴地认为
async
有类似作用域的影响范围,这个范围仅包括函数自己的函数体,而不包括其函数体内部声明的其他函数体。声明函数为 async ,说明这是个异步(返回类型为 promise )的函数。
但是函数 login 为异步的,不说明 login 中的所有函数都是异步的。如果不 await ,还是会从上往下执行,执行完最后一行代码,就直接返回了。
比如你代码中的
login函数 返回的时候,你的 form.parse 可能还没有解析完成。(没有 await,所以代码不会等待异步完成,就执行下一行了)
比较合理的应该是:
参考 :https://segmentfault.com/a/11...