jak napisać setTimeout z params by Coffeescript

Proszę mi powiedzieć, jak pisać javascript poniżej w coffeescript.

setTimeout(function(){
    something(param);
}, 1000);
Author: tomodian, 2011-06-23

6 answers

Myślę, że jest to użyteczna konwencja wywołań zwrotnych jako ostatni argument funkcji. Zwykle tak jest w przypadku węzła.na przykład js API. Więc mając to na uwadze:

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

delay 1000, -> something param

Przyznaję, to dodaje narzut dodatkowego wywołania funkcji do każdego setTimeout, który wykonasz; ale w dzisiejszych interpreterach js wada wydajności jest znikoma, chyba że robisz to tysiące razy na sekundę. (A co ty w ogóle robisz ustawiając tysiące timeoutów na sekundę?)

Z oczywiście, prostszym podejściem jest po prostu nazwij swoje wywołanie zwrotne, które ma tendencję do tworzenia bardziej czytelnego kodu i tak (jashkenas jest wielkim fanem tego idiomu): {]}

callback = -> something param
setTimeout callback, 1000
 206
Author: Trevor Burnham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 20:22:21
setTimeout ( ->
  something param
), 1000

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

 178
Author: Nicholas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-12 04:40:07
setTimeout -> 
  something param
, 1000
 65
Author: Dirk Smaverson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-13 01:27:28

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

setTimeout (-> something param), 1000

Zauważ, że nie jest to dokładne tłumaczenie, ponieważ funkcja anonymous zwraca wynik wywołania something(param) zamiast undefined, jak w Twoim urywku.

 44
Author: maerics,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-23 19:44:49

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

setTimeout (-> alert "hi"), 1000
 12
Author: Mahesh Kulkarni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-09 04:34:10

Inna opcja:

setTimeout(
    -> something param
    1000
)
 3
Author: Ron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-05 14:05:13