jak napisać setTimeout z parametrami według Coffeescript

208

Proszę, powiedz mi jak napisać javascript poniżej w coffeescript.

setTimeout(function(){
    something(param);
}, 1000);
tomodian
źródło
jak możemy do tego dodać .call ('hello')
Atul

Odpowiedzi:

214

Myślę, że to przydatna konwencja dla wywołań zwrotnych, które są ostatnim argumentem funkcji. Zwykle dzieje się tak na przykład w przypadku interfejsu API Node.js. Mając to na uwadze:

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

delay 1000, -> something param

To prawda, że ​​narzuca to dodatkowe wywołanie funkcji w każdym setTimeoututworzeniu; ale w dzisiejszych interpretatorach JS wada wydajności jest nieznaczna, chyba że robisz to tysiące razy na sekundę. (A zresztą, co robisz, ustawiając tysiące limitów czasu na sekundę?)

Oczywiście, prostszym podejściem jest po prostu nazwanie twojego wywołania zwrotnego, co i tak generuje bardziej czytelny kod (jashkenas jest wielkim fanem tego idiomu):

callback = -> something param
setTimeout callback, 1000
Trevor Burnham
źródło
Świetnie, chyba że potrzebujesz zagnieżdżonych wywołań zwrotnych
Steven Pribilinskiy
184
setTimeout ( ->
  something param
), 1000

Nawiasy są opcjonalne, ale rozpoczęcie linii przecinkiem wydawało mi się niechlujne.

Mikołaj
źródło
Wyjmij pareny i napij się kawy, ~)
Billy Moon
4
Nie kompiluje się dla mnie w nawiasach. Musiałem je usunąć, rozpocząć linię przecinkiem i działa jak urok.
Jeremy Thille,
Za pomocą nawiasów możesz to zrobić w jednym wierszu.
1
@JeremyThille pamiętaj, że spacja setTimeouti paren otwierające są ważne. Spacja oznacza, że ​​nawiasy otaczają zamknięcie jako pierwszy parametr setTimeout; jeśli było to bezpośrednio po t, wówczas coffescript oczekiwałby, że nawiasy zawierają oba parametry.
jankins
67
setTimeout -> 
  something param
, 1000
Dirk Smaverson
źródło
Jest to najlepsze, jeśli chcesz po prostu użyć anonimowej funkcji.
Alex K
również dla funkcji o nazwie setTimeout o nazwie Func, 5000
Dirk Smaverson,
Pamiętaj, że białe znaki są ważne. Połączenie musi być rozmieszczone dokładnie tak, jak powyżej. Jeśli something paramjest w tej samej linii co setTimeout, jest analizowany inaczej.
henrebotha
46

Spowoduje to w przybliżeniu równoważne tłumaczenie (dzięki @Jel Mueller):

setTimeout (-> something param), 1000

Pamiętaj, że nie jest to dokładne tłumaczenie, ponieważ funkcja anonimowa zwraca wynik wywołania something(param)zamiast niezdefiniowanego, jak w twoim fragmencie.

maerika
źródło
1
Za dużo parens / średników! To jest CoffeeScript, pozbycie się nadmiaru parens jest o połowę mniejsze. setTimeout (() -> something param), 1000
Joel Mueller
Nicholas podkreśla, że ​​puste pareny są również opcjonalne.
Joel Mueller
12

Uważam, że to najlepsza metoda, aby zrobić to samo,

setTimeout (-> alert "hi"), 1000
Mahesh Kulkarni
źródło
3

inna opcja:

setTimeout(
    -> something param
    1000
)
Ron
źródło