在我的应用程序中,我为用户提供了启动循环递归函数的多个实例的能力。目前,每个函数将永远继续,我需要一种显式结束每个函数的方法。考虑到这一点,我想我需要保持一个正在运行的进程数组,为每个进程存储一个唯一的id,并将一个isRunning变量与其关联,但我不能完全理解如何实现这一点。
每当用户向我的API发出POST时,服务器端的这个函数get就会从前端调用,并且会以随机的间隔继续调用自己。
function scrapeAtRandomInterval(id, search_terms, category, location, min, max) {
// Not currently using the id param as I don't need it for anything on the server side but thought it might come in handy to solve this issue.
scrape(location, category, search_terms, min, max);
var rand = randomIntBetweenBounds(0, 3600000 / 3);
setTimeout(function() {
scrapeAtRandomInterval(id, search_terms, category, location, min, max);
}, rand);
}
当用户发出DELETE请求时,我需要一种方法来停止与调用该函数的POST相关联的函数调用。同样,我设想通过引用一个对象数组,每个对象都有id和一个bool标志,然后可能在函数内部添加一个检查,如果是isRunning?
发布于 2018-07-16 00:34:00
我想象一下,通过引用一个对象数组,每个对象的id都是...
搜索数组是O(n/2)
的平均值,使用对象作为散列表是O(1)
,因此速度快得多,所以使用数组是可行的,但它很慢(对于许多正在运行的进程)。
...和一个布尔标志,然后在函数内部,我可以添加一个检查,如果是isRunning?
或者更简单,您只需将计时器存储在id下,并在需要时取消计时器,因此您需要一个对象来根据进程id存储计时器id:
const timers = {};
然后,当设置新的超时时,存储它的id:
timers[id] = setTimeout(...);
然后,要清除它,只需执行以下操作:
clearTimeout(timers[id]);
delete timers[id]; // allow the engine to optimize the hashtable
https://stackoverflow.com/questions/51350157
复制相似问题