2016-07-22 12 views
-1

aufrufen Ich möchte die Ausführung meines Codes um 2 Sekunden zu stoppen, so dass alle laufenden Animation abgeschlossen werden kann. Ich versuche, eine Funktion setTimeout in Node.jsIst es möglich, benutzerdefinierte Funktion mit setTimeout Node.js

zu nennen, was ich in meinem Code tue:

this.userActivity = function(a,b,side){ 
    //some code of mine 
    setTimeout(this.doTheMagicIfPossible(this.scoringPossible),2000); 
} 

this. doTheMagicIfPossible = function(passedValue){ 
    console.log("printing it out after 2 seconds"+passedValue); 
} 

aber die Ausführung ist nicht für 2 Sekunden gestoppt zu werden.

Wenn ich so tun:

setTimeout(this.doTheMagicIfPossible,2000,this.scoringPossible); 

Ausführung wird von 2 Sekunden gestoppt zu werden Funktion ist aber nicht this.scoringPossible bekommt, ist es in diesem Fall nicht definiert.

Antwort

1

Sortieren von. Sie sehen nicht, dass die Ausführung für 2 Sekunden angehalten wird, weil Sie tatsächlich innerhalb Ihres setTimeout Aufrufs doTheMagicIfPossible aufrufen.

Wenn Sie Parameter an den Rückruf übergeben möchten, der an setTimeout übergeben wurde, müssen Sie eine Funktion übergeben, die keine Argumente enthält, die dem Rückruf die richtigen Argumente liefert. Javascript stellt die Funktion bind in Function ‚s Prototyp gerade dies zu tun, zum Beispiel:

setTimeout(this.doTheMagicIfPossible.bind(this, this.scoringPossible),2000); 

Hier bind eine neue Funktion erstellt, ohne Argumente, die, wenn sie doTheMagicIfPossible mit this auf die gleichen this rufen genannt und this.scoringPossible als erstes Argument.

+0

Mit weniger Magie: 'var me = this; setTimeout (function() {me.doTheMagicIfPossible (me.scoringPossible)}, 2000); 'wo' me' verwendet wird, um später auf 'this' zu verweisen, wo es sich möglicherweise geändert hat. – Phrogz

Verwandte Themen