将功能限制为每5分钟仅运行一次(即使多次调用)

时间:2019-08-28 19:53:48

标签: node.js api express queue limit

我的Express / Node API中有一个函数,该函数本质上是在执行某些操作后对数据进行“汇总”。

用户可以在短时间内多次执行操作(调用API路由)。调用此API路由后,将调用舍入函数。我不希望每次都调用它。例如,每5分钟只有一次(尽管仍由API操作触发)。

我真的只关心 final 调用(因为综述使用该信息来更新其他数据,但是更早的数据也可以,只要它们彼此隔开(且不连续)即可。

>

基本上我想要的是: -即使上舍入函数被调用了20次,也就是说5分钟,只能运行一次

我已经尝试使用lodash的去抖功能;但对于我来说仍然无法正常工作。

例如...(不是真实的代码,而是基本结构)

function roundup(){
// Do something here, but it's DB intensive and we really only care about the *final call* so only want it to run sometimes (?)

}

// API Route which will call roundup when finished
app.post('/list/join', (req, res) => {
   // my lodash attempt 
   let debounced_roundup = _.debounce(roundup, 300000);
   debounced_roundup();
});

我希望在持续时间(300000)之后,去抖动会一直保持对舍入函数的调用,但是由于API调用是单独的,所以我认为它们不会像预期的那样触发去抖动。

1 个答案:

答案 0 :(得分:1)

您需要在post方法的外部 中创建去抖动器,否则每次调用API时,您都将创建一个新的,独立的去抖动器实例,而前者则一无所知触发条件。

let debounced_roundup = _.debounce(roundup, 300000);

// API Route which will call roundup when finished
app.post('/list/join', (req, res) => {
   debounced_roundup();
});