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);

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

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.


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

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.


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

3

andere Option:

setTimeout(
    -> something param
    1000
)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.