2013-05-09 9 views
13

Mam następujący kod, który działa dobrze pod Chrome (V8), ale nie wewnątrz węzła:setTimeout w node.js

var id; 
id = setTimeout("TimeoutHandler()", 10); 
console.log ('SET'); 

function TimeoutHandler() 
{ 
    clearTimeout(id); 
    console.log ('CLEAR'); 
} 

wyjście Chrome: wyjście

SET 
CLEAR 

Nodejs:

SET 
timers.js:110 
    first._onTimeout(); 
     ^
TypeError: Property '_onTimeout' of object [object Object] is not a function 
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 

Jakieś pomysły, dlaczego? Dzięki

+0

Interesujące, że NodeJS nie sprawdza typu-sprawdź argumentu. Mogłoby to zapewnić wyraźniejszy komunikat o błędzie, gdyby tak się stało. –

Odpowiedz

23

W przeciwieństwie do większości przeglądarek, setTimeout w pliku node.js nie akceptuje parametru ciągu. Musisz przekazać mu funkcję. Na przykład:

function TimeoutHandler() 
{ 
    clearTimeout(id); 
    console.log ('CLEAR'); 
} 

var id; 
id = setTimeout(TimeoutHandler, 10); 
console.log ('SET');