我有一个用于计划任务的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
中,计时器导致对象,因为计时器可以具有方法。
根据您的发言,我还建议您考虑使用某种任务队列,而不要启动大量的计时器。您最好维护一个任务队列,并通过仅维护一个计时器将它们从开始时间到来就从队列中拉出来。
关于javascript - NodeJs setTimeout clearTimeout的唯一ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22744001/