在 Axios 请求上使用 Lodash 的 Debounce 会产生意想不到的结果

Posted

技术标签:

【中文标题】在 Axios 请求上使用 Lodash 的 Debounce 会产生意想不到的结果【英文标题】:Using Lodash's Debounce on Axios Request Produces Unexpected Result 【发布时间】:2017-02-10 02:43:32 【问题描述】:

每次输入文本时,我的应用都会更新。然后在 axios 请求上使用 debounce,请求排队,直到计时器用完,然后它们都立即执行。我试图将请求限制为每 10 秒一个。我哪里错了?

如果有后果,我会在 ReactJS 中执行此操作。

const debouncedSync = _.debounce(() => this.sync () , 10000);

sync = (requestBody) => 
    axios.post('http://127.0.0.1:8000/Server/', requestBody);
  ;

【问题讨论】:

"我试图将请求限制为每 10 秒一次" 那将是 _.throttle() 而不是 _.debounce()。除此之外,真正的问题是什么? 好吧,这很清楚。除此之外,唯一的问题是我还是个新手。非常感谢!如果您将其作为答案提交,我会将其标记为已接受。 【参考方案1】:

请查看faxios debounce

let fetcher = faxios()
.baseURL('http://jsonplaceholder.typicode.com')
.url('posts', 1, 'comments')
.debounce(1 * 1000); // debounce time 1000ms

fetcher
.FETCH // => Promise
.then(res => console.log('res1:',res))
.catch(err => console.log('error1:', err));

fetcher
.FETCH // => Promise
.then(res => console.log('res2:', res))
.catch(err => console.log('error2:', err));

fetcher
.FETCH // => Promise
.then(res => console.log('res3:',res))
.catch(err => console.log('error3:', err));

fetcher
.FETCH // => Promise
.then(res => console.log('res4:', res))
.catch(err => console.log('error4:', err));


/**

error1:debounced

error2:debounced

error3:debounced

res4:... 

**/

【讨论】:

以上是关于在 Axios 请求上使用 Lodash 的 Debounce 会产生意想不到的结果的主要内容,如果未能解决你的问题,请参考以下文章

我对 debounce axios 请求的实现使承诺永远处于挂起状态,有没有更好的方法?

如何使用自定义 React 钩子通过 Axios 发出 POST 或 DELETE 请求

在 Laravel 5.5 上使用 axios 发布请求

vue后端数据赋值给类

10.VUE学习之使用lodash库减少watch对后台请求的压力

axios post 请求挂在有效请求上