2016-08-11 2 views
0

Dies ist mein CoffeeScript-Code.Übergeben von Methode in SetTimeOut mit CoffeeScript

setTimeout (-> @checkProgress()), 5000 

Als ich dies im Browser ausgeführt ich die folgende Fehlermeldung erhalten:

TypeError: this.checkProgress is not a function 

Das Verfahren sieht so aus:

checkProgress: -> 
    ~ code 
    ~ code 
    ~ code 
    setTimeout (-> @checkProgress()), 5000 

Also irgendwann möchte ich noch einmal die Methode aufzurufen . Wie kann ich das machen? Vielen Dank.

+0

'@ checkProgress' ist bereits eine' Funktion'. Sie müssen es nicht in eine andere 'Funktion' einbinden. Verwenden Sie einfach 'setTimeout @checkProgress, 5000' – Ruslan

+0

In anderen Fällen können Sie helper verwenden:' delay = (t, fn) -> setTimeout (fn, t) '. – Ruslan

+0

Das habe ich vorher gemacht, aber dann habe ich gelesen, dass dabei die eigentliche Funktion nicht aufgerufen wird, sondern dass das Ergebnis der Funktion in dieser Param-Position endet, was ich nicht wollte. – terratunaz

Antwort

2

setTimeout Lauf @checkProgress in window Kontext. Verwenden Sie Fettpfeil:

setTimeout (() => @checkProgress), 5000 
+0

Das hat irgendwie funktioniert. Ich habe einen anderen Fehler bekommen. Nicht definiert für die Variablen, die ich im Methodencode referenziert habe. – terratunaz

0

Das persönlich funktionierte perfekt auch für mich.

recall = => 
      @checkProgress() 
     setTimeout recall, 5000 
Verwandte Themen