JavaScript中async未后接function的含义?fastify示例代码语法咨询
语法说明
你看到的async preHandler(request, reply) {...}是ES6对象方法简写语法和async异步函数标记的组合用法,没有特殊语义,和你熟悉的async function语法本质完全一致。
1. 先理解对象方法简写
ES6之前,对象中定义方法需要显式写function关键字和冒号:
const config = { preHandler: function (request, reply) { // 业务逻辑 } }
ES6推出了方法简写语法,允许省略冒号和function关键字,写法更简洁,功能和上面完全等价:
const config = { preHandler(request, reply) { // 业务逻辑 } }
2. async关键字的作用
async的作用是标记当前函数为异步函数,无论函数是哪种声明形式,只需要加在函数声明的最前方即可:
- 普通函数声明:
async function preHandler() {} - 函数表达式:
const preHandler = async function () {} - 箭头函数:
const preHandler = async () => {} - 对象方法简写:直接加在方法名前面即可,也就是你看到的
async preHandler(request, reply) {}
你代码中的片段和下面的写法完全等价:
module.exports = async function (fastify, opts) { fastify.register(proxy, { upstream: 'https://news.ycombinator.com/', preHandler: async function(request, reply) { if (request.query.token !== 'abc') { throw fastify.httpErrors.unauthorized(); } }, }); };
补充说明
你这段代码里将preHandler标记为异步函数后,Fastify会自动等待该异步函数执行完成再走后续的代理逻辑,你也可以在这个函数内部直接使用await调用其他异步接口,不需要额外处理异步回调。
内容的提问来源于stack exchange,提问作者han
相关产品推荐
相关产品推荐

