我有一个用于调度任务的NodeJS应用程序,该任务用于创建预订,该预订可以在任务执行之前取消,有可能有数十万个任务(例如在一分钟内创建67个任务)
我这样做的方式是通过调用这个函数:
runOnDate = function (dateIn){
console.log('scheduling')
var now = (new Date()).getTime();
var booking = setTimeout(startBooking , (dateIn - now));
//Lets try to catch the ID number of booking
console.log(booking) // Shows [object Object]
console.log(booking.timeoutID) // Shows undefined
}
我的问题开始,如果我必须取消这个setTimeout
之一,我知道setTimeout
返回一个Number
与clearTimeout()
一起使用。
但我似乎不能得到的数字,是否有一种方法来创建一个定时器与唯一ID我可以使用clearTimeout()
或其他方式调用clearTimeout
上的特定setTimeout
?
clearTimeout
应该传递从setTimeout
返回的任何内容。node
的计时器不返回number
,而是返回object
。所以在这种情况下,你应该通过传递对象来执行clearTimeout(booking)
。在浏览器中,它返回一个数字。
setTimeout
/clearTimeout
是浏览器api的一部分,不是JS标准,所以在Node中甚至不需要提供它们,更不用说它们具有相同的参数/返回值了。在node
中,计时器导致一个对象,因为计时器可以有方法。
考虑到你所说的,我还建议你考虑使用某种任务队列,而不是启动大量计时器。您最好维护一个任务队列,并通过维护单个计时器在开始时间到达时将任务从队列中取出。