我有一个用于计划任务的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返回什么,都应传递setTimeoutnode不为其计时器返回number,而是返回object。因此,在这种情况下,您应该通过将对象传递给clearTimeout(booking)来进行操作。在浏览器中,它返回一个数字。

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

根据您的发言,我还建议您考虑使用某种任务队列,而不要启动大量的计时器。您最好维护一个任务队列,并通过仅维护一个计时器将它们从开始时间到来就从队列中拉出来。

关于javascript - NodeJs setTimeout clearTimeout的唯一ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22744001/

10-09 21:01