Fastify中使用async/await异步请求产生重复请求的问题
接上文使用Fastify创建RESTFul API做客户端请求代理的过程中发现这个非常诡异的事情,使用fastify的代理服务端在使用await异步请求之后总会产生两次重复的请求,在directus服务端每次都能收到两条信息,翻阅了大量文档都没能解决,一度以为是axios和第三方库引起的的问题,最后还是决定从fastify着手,直到翻到了github上面的这个issue。
Fastify的维护者mcollina的原话:
If your handler is called twice, you have a hook that is calling
donetwice and/or being declaredasyncwhile also callingdone.如果您的处理程序被调用两次,则您有一个钩子调用了done两次和/或在声明的async同时还调用了done
于是检查代码,发现我的代码preHandler: async (request, reply, done) => { }引入了done并且调用了。
最后去掉done发现问题得到了解决,这里还需要注意早期版本的next()在这里同样适用。
这就意味着:在异步调用的时候不done()不能和异步共存,否则就会出现重复请求,一定要注意。