jak napisać setTimeout z parametrami według Coffeescript


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

Ś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.


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

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.


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


3

inna opcja:

setTimeout(
    -> something param
    1000
)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.