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
done
twice and/or being declaredasync
while also callingdone
.如果您的处理程序被调用两次,则您有一个钩子调用了done两次和/或在声明的async同时还调用了done
于是检查代码,发现我的代码preHandler: async (request, reply, done) => { }
引入了done
并且调用了。
最后去掉done
发现问题得到了解决,这里还需要注意早期版本的next()
在这里同样适用。
这就意味着:在异步调用的时候不done()
不能和异步共存,否则就会出现重复请求,一定要注意。