NodeJs setTimeout用于clearartimeout的唯一ID



我有一个用于调度任务的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返回一个NumberclearTimeout()一起使用。

但我似乎不能得到的数字,是否有一种方法来创建一个定时器与唯一ID我可以使用clearTimeout()或其他方式调用clearTimeout上的特定setTimeout ?

clearTimeout应该传递从setTimeout返回的任何内容。node的计时器不返回number,而是返回object。所以在这种情况下,你应该通过传递对象来执行clearTimeout(booking)。在浏览器中,它返回一个数字。

setTimeout/clearTimeout是浏览器api的一部分,不是JS标准,所以在Node中甚至不需要提供它们,更不用说它们具有相同的参数/返回值了。在node中,计时器导致一个对象,因为计时器可以有方法。

考虑到你所说的,我还建议你考虑使用某种任务队列,而不是启动大量计时器。您最好维护一个任务队列,并通过维护单个计时器在开始时间到达时将任务从队列中取出。

最新更新