Fastify中使用async/await异步请求产生重复请求的问题

接上文做客户端请求代理的过程中发现这个非常诡异的事情,使用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 declared async while also calling done.

如果您的处理程序被调用两次,则您有一个钩子调用了done两次和/或在声明的async同时还调用了done

于是检查代码,发现我的代码preHandler: async (request, reply, done) => { }引入了done并且调用了。

最后去掉done发现问题得到了解决,这里还需要注意早期版本的next()在这里同样适用。

这就意味着:在异步调用的时候不done()不能和异步共存,否则就会出现重复请求,一定要注意。

Post Comment