我的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调用是单独的,所以我认为它们不会像预期的那样触发去抖动。
答案 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();
});