wie man setTimeout mit params von Coffeescript schreibt

208

Bitte sagen Sie mir, wie man Javascript unten in Coffeescript schreibt.

setTimeout(function(){
    something(param);
}, 1000);
Tomodian
quelle
Wie können wir .call ('Hallo') hinzufügen
Atul

Antworten:

214

Ich denke, es ist eine nützliche Konvention für Rückrufe als letztes Argument für eine Funktion. Dies ist beispielsweise normalerweise bei der Node.js-API der Fall. In diesem Sinne:

delay = (ms, func) -> setTimeout func, ms

delay 1000, -> something param

Zugegeben, dies erhöht den Overhead eines zusätzlichen Funktionsaufrufs für jeden von setTimeoutIhnen; Bei den heutigen JS-Interpreten ist der Leistungsnachteil jedoch unbedeutend, es sei denn, Sie tun dies tausende Male pro Sekunde. (Und was machst du überhaupt, wenn du Tausende von Zeitüberschreitungen pro Sekunde einstellst?)

Ein einfacherer Ansatz besteht natürlich darin, einfach Ihren Rückruf zu benennen, der ohnehin zu besser lesbarem Code führt (Jashkenas ist ein großer Fan dieser Redewendung):

callback = -> something param
setTimeout callback, 1000
Trevor Burnham
quelle
Großartig, es sei denn, Sie benötigen verschachtelte Rückrufe
Steven Pribilinskiy
184
setTimeout ( ->
  something param
), 1000

Die Klammern sind optional, aber das Beginnen der Zeile mit einem Komma schien mir chaotisch.

Nikolaus
quelle
Nehmen Sie die Parens heraus und trinken Sie eine Tasse Kaffee, ~)
Billy Moon
4
Kompiliert nicht mit den Klammern für mich. Ich musste sie entfernen, die Zeile mit einem Komma beginnen und es funktioniert wie ein Zauber.
Jeremy Thille
Mit Klammern können Sie dies auch in einer Zeile tun.
1
@JeremyThille beachten Sie, dass der Abstand zwischen setTimeoutund dem Eröffnungsparen wichtig ist. Das Leerzeichen dort bedeutet, dass die Klammern den Abschluss als ersten Parameter für setTimeout umgeben. Wenn es direkt nach dem t wäre, würde Coffescript erwarten, dass die Klammern beide Parameter einschließen.
Jankins
67
setTimeout -> 
  something param
, 1000
Dirk Smaverson
quelle
Dies ist am besten, wenn Sie nur eine anonyme Funktion verwenden möchten.
Alex K
auch für eine benannte Funktion, setTimeout namensFunc, 5000
Dirk Smaverson
Beachten Sie, dass Leerzeichen wichtig sind. Der Anruf muss genau wie oben verteilt sein. Wenn something parames sich in derselben Zeile befindet wie setTimeout, wird es anders analysiert.
Henrebotha
46

Dies führt zu einer ungefähr gleichwertigen Übersetzung (danke @Joel Mueller):

setTimeout (-> something param), 1000

Beachten Sie, dass dies keine exakte Übersetzung ist, da die anonyme Funktion das Ergebnis des Aufrufs something(param)anstelle von undefiniert zurückgibt , wie in Ihrem Snippet.

Maerics
quelle
1
Zu viele Parens / Semikolons! Dies ist CoffeeScript, überschüssige Parens loszuwerden ist der halbe Punkt. setTimeout (() -> something param), 1000
Joel Mueller
Nicholas macht einen guten Punkt, dass die leeren Parens auch optional sind.
Joel Mueller
12

Ich finde das die beste Methode, um dasselbe zu tun,

setTimeout (-> alert "hi"), 1000
Mahesh Kulkarni
quelle
3

andere Option:

setTimeout(
    -> something param
    1000
)
Ron
quelle