2017-07-18 8 views
0

sagen, dass ich die folgende JavaScript-Datei haben:Verwenden von SetInterval in node.js REPL?

function logMe() { 
    for(var i=0; i < 4; i++) console.log(i); 
} 

setInterval(logMe(), 2000); 

Dann öffne ich ein node.js REPL mit dem Befehl node.

ich dann mein Skript laden und auswerten mit:

eval(fs.readFileSync('myScript.js').toString()) 

ich wieder den Fehler:

TypeError: "callback" argument must be a function 
    at exports.setInterval (timers.js:414:11) 
    at eval (eval at <anonymous> (repl:1:68), <anonymous>:5:1) 
    at repl:1:1 
    at sigintHandlersWrap (vm.js:22:35) 
    at sigintHandlersWrap (vm.js:96:12) 
    at ContextifyScript.Script.runInThisContext (vm.js:21:12) 
    at REPLServer.defaultEval (repl.js:346:29) 
    at bound (domain.js:280:14) 
    at REPLServer.runBound [as eval] (domain.js:293:12) 
    at REPLServer.<anonymous> (repl.js:545:10) 

Gibt es eine mögliche Arbeit um hier, wenn ich setInterval innerhalb des Knotens REPL verwenden möchten ?

+0

'setInterval (logMe, 2000)', _without_ der '()'. –

+2

Und FWIW, Sie sollten 'require ('./ myScript')' anstelle von 'eval()' –

Antwort

2

Nein, nur ein Tippfehler auf Ihrer Seite.

setInterval(logMe, 2000); 

Sie müssen Ihre Funktion als Funktion übergeben, anstatt sie aufzurufen.

+1

Das ist nicht, was ich einen Tippfehler nennen würde. Vielleicht wusste der OP nicht, was er tat – bugwheels94

+1

@ bugwheels94. Ok, das ändert meine Antwort nicht. Es könnte ein Tippfehler sein oder Unwissenheit. Wie auch immer, meine Antwort löst es. – Paul

2

logMe() wird exexute die Funktion

wo wie in setInterval Sie benötigen

die Funktion übergeben
function logMe() { 
    for(var i=0; i < 4; i++) console.log(i); 
} 

setInterval(logMe, 2000); 
       ^no() 

function logMe() { 
 
     for(var i=0; i < 4; i++) console.log(i); 
 
    } 
 
    
 
    setInterval(logMe, 2000);


function logMe() { 
 
    for(var i=0; i < 4; i++) console.log(i); 
 
} 
 

 
setInterval(logMe(), 2000);


Verwandte Themen