小编介绍
大家好,我是本际云服务器推荐网的小编小本本,今天我要和大家分享一下实现客户多次提交的方法。

实现客户多次提交的方法
要求可以实现客户多次提交,这样的要求如何实现?实现方法很多,比如添加loading,在第一次点击之后就无法再次点击。另外一种方法就是给请求异步函数添加上一个静态锁,防止并发产生。这就是ahooks的useLockFn做的事情。
如何使用useLockFn
useLockFn用于给一个异步函数增加竞态锁,防止并发执行。通过lockRef做一个标识位,初始化的时候它的值为false。当正在请求,则设置为true,可以影响下次再调用这个函数的时候,就直接return,不执行原函数,从而达到加锁的目的。这里的入参是异步函数,返回的是一个增加了竞态锁的函数。
如何自动取消重复的请求
怎么实现自动取消呢?答案是通过axios的拦截器。定义几个重要的辅助函数,包括generateReqKey、addPendingRequest、removePendingRequest,分别用于生成请求Key、向pendingRequest对象中添加请求信息、检查并取消重复请求。接着,在请求拦截器中,先检查并取消重复请求,再把请求信息添加到pendingRequest对象中。在响应拦截器中,从pendingRequest对象中移除请求。如果是重复请求,则直接取消掉,并打印出日志。这样,就能够在拦截器中自动将已发的请求取消。另外,通过加入白名单功能,可以让请求不进行取消。
思考与总结
useLockFn也可以让hook或方法给请求函数添加竞态锁的方式解决重复请求的问题。可这个很需要依赖于开发者的习惯,假如没有一些规则的约束,很难避免问题。我们在通过axios拦截器以及其CancelToken功能,这样就能够在拦截器中自动将已发的请求取消,其实我们也要注意的是有一些接口就是需要重复发送请求,可以考虑加一下白名单功能,让请求不进行取消。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/7243.html
