2014-03-30 87 views
0

我有一個用於調度任務的NodeJS應用程序,該任務用於創建預訂,可以在執行任務之前取消預訂,有成百上千個任務的可能性(例如在一分鐘內產生67個任務)NodeJs setTimeout clearTimeout的唯一ID

的方法,我做這件事是通過調用這個函數:

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()或其他方式來調用特定setTimeoutclearTimeout

+1

我不明白,爲什麼你需要這個號碼,只要做'clearTimeout(booking)',如果你有很多引用,可以使用數組或對象來存儲它們。 – adeneo

+0

預訂應該是一個數字,而不是一個對象。 http://jsfiddle.net/fz2WA/ –

+0

謝謝克里斯蒂娜,我的壞! – user1220740

回答

-1

clearTimeout應該通過從setTimeout返回的任何內容。 node不會爲其計時器返回number,而會返回object。所以在這種情況下,你應該通過傳遞對象來做clearTimeout(booking)。在瀏覽器中,它返回一個數字。

setTimeout/clearTimeout是瀏覽器API的一部分,不是JS標準,所以不需要它們甚至在Node中提供,因此它們具有相同的參數/返回值。在node定時器產生一個對象,因爲定時器可以有方法。

鑑於你所說的話,我還建議你考慮使用某種類型的任務隊列,而不是開始大量的定時器。你最好維護一個任務隊列,並且通過維護一個定時器來將它們從隊列中拉出來,因爲它們的起始時間到了。

相關問題