2011-06-23 16 views
195

Proszę mi powiedzieć, jak napisać javascript poniżej w coffeescript.jak napisać setTimeout z parametrami przez Coffeescript

setTimeout(function(){ 
    something(param); 
}, 1000); 
+1

Podniosłem to pytanie, nie to, że dokładnie to, czego szukałem, ale odpowiedzi prowadzą mnie we właściwym kierunku. – MikeScott8

+1

To jest świetne pytanie; to jedna z niewielu osób, które pomagają mi odkryć ograniczenia Coffeescript (tak jak jest teraz). – thure

+0

jak możemy dodać .call ("cześć") do tego – Atul

Odpowiedz

205

Myślę, że jest to przydatna konwencja dla wywołania zwrotnego jako ostatniego argumentu funkcji. Zwykle dotyczy to na przykład interfejsu API Node.js. Tak więc biorąc to pod uwagę:

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

delay 1000, -> something param 

prawda, to dodaje napowietrznej dodatkową funkcją wywołania każdej setTimeout można zrobić; ale w dzisiejszych interpreterach JS wada wydajności jest znikoma, chyba że robisz to tysiące razy na sekundę. (A poza tym, co robisz ustawiając setki timeoutów na sekundę?)

Oczywiście prostszym rozwiązaniem jest po prostu nadanie swojemu callbackowi, co zwykle prowadzi do uzyskania bardziej czytelnego kodu (jashkenas jest wielkim fanem tego idiom):

callback = -> something param 
setTimeout callback, 1000 
+0

Świetne, chyba że potrzebujesz zagnieżdżonych połączeń zwrotnych. –

+0

Dobra odpowiedź !!!! –

44

Spowoduje to z grubsza odpowiednik tłumaczeniu (dzięki @Joel Mueller):

setTimeout (-> something param), 1000 

zauważyć, że nie jest to dokładne tłumaczenie, ponieważ funkcja anonimowa zwraca wynik wywołania something(param) zamiast niezdefiniowane, jak w twoim urywku.

+1

Zbyt wiele parens/średników! To jest CoffeeScript, pozbycie się nadmiaru parens jest o połowę mniejsze. 'setTimeout (() -> coś param), 1000' –

+0

@Joel Mueller: dzięki, zaktualizowałem swoją odpowiedź. – maerics

+0

Nicholas podkreśla, że ​​puste pareny są opcjonalne. –

174

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

+0

Dzięki. Coffeescript czasami mnie zawodzi, ponieważ kod jest tak czysty. – tomodian

+0

Wyjmij pareny i wypij filiżankę kawy, ~) –

+20

to nie jest czyste, jeśli cię wkręca, po prostu mów) :) – Kevin

60
setTimeout -> 
    something param 
, 1000 
+0

To jest najlepsze, jeśli chcesz po prostu użyć anonimowej funkcji. –

+0

także dla nazwanej funkcji, setTimeout namedFunc, 5000 –

+0

Należy zwrócić uwagę, że białe spacje są ważne. Połączenie musi być ustawione dokładnie tak, jak powyżej. Jeśli 'coś param' jest w tej samej linii co' setTimeout', to jest przetwarzane w inny sposób. – henrebotha

3

inna opcja:

setTimeout(
    -> something param 
    1000 
) 
12

znajdę to najlepszy sposób, aby zrobić to samo,

setTimeout (-> alert "hi"), 1000 
+0

Podoba mi się ten wbudowany skrypt –