洛达什油门或循环内去抖动的问题



我正在调用一个获取请求,我试图通过使用 Lodash 油门或去抖动来限制该请求。我正在循环访问一些数组并立即调用函数,这会影响服务器响应 502。我正在尝试使用油门减慢请求速度。下面的代码应该解释我的结构。这个例子不起作用,我不知道为什么?


    function doSomething(i) {
      console.log('Doing something: ' + i)
    }

    for (var i = 0; i < 50; i++) {
       _.throttle( function() { doSomething(i) }, 15000);
    }

函数 doSomething(( 应该每 15 秒调用一次,并且应该堆叠对此函数的其他请求。

_.throttle()不应该

以这种方式使用。正确的方法是先存储结果。

var throttledDoStomething = _.throttle(doSomething, 15000)
for (var i=0; i < 50; i++) {
  throttledDoSomething(i)
}

回复评论:

在这种情况下,油门可能不是正确的选择。 您可能希望通过使用 Promise 来使用异步函数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

function asyncDoSomething(i) {
  return new Promise((resolve, reject) => {
    console.log('Doing something: ' + i);
    setTimeout(()=>{
      resolve(i);
    }, 15000)
  })
}
async function doSomethingLoop() {
  for (var i = 0; i < 50; i++) {
    await asyncDoSomething(i);
  }
}
doSomethingLoop();

文档建议应首先进行限制功能。
放置参数需要使用匿名函数(在我的情况下,我使用了数组函数(。

function doSomething(i) {
  console.log("Doing something: " + i);
}
const throttledSomething = _.throttle(() => { doSomething(i)}, 5000);
for (var i = 0; i < 50; i++) {
  throttledSomething(i);
}

最新更新