Як писати setTimeout з парами за допомогою Coffeescript


Відповіді:


214

Я думаю, що це корисна умова для зворотних викликів, які стають останнім аргументом функції. Як правило, це стосується, наприклад, API Node.js. Отже, маючи це на увазі:

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

delay 1000, -> something param

Зрозуміло, це додає накладні витрати додаткового виклику функції кожному setTimeout; але в сучасних перекладачах JS недолік продуктивності є незначним, якщо ви не робите це тисячі разів за секунду. (І що ви все робите, встановлюючи тисячі тайм-аутів в секунду?)

Звичайно, більш простий підхід полягає в тому, щоб просто назвати зворотний дзвінок, який, як правило, створює більше читабельного коду (яшкенас є великим шанувальником цієї ідіоми):

callback = -> something param
setTimeout callback, 1000


184
setTimeout ( ->
  something param
), 1000

В дужках необов’язково, але починати рядок комою мені здалося безладним.


Вийміть парен і випийте каву, ~)
Біллі Мун

4
Не компілюється з дужками для мене. Мені довелося їх прибрати, почати рядок комою, і це працює як шарм.
Джеремі Тілль

З дужками ви також можете це зробити в одному рядку.

1
@JeremyThille зауважимо, що простір між ними setTimeoutта батьківським відкриттям є важливим. Простір там означає, що дужки оточують закриття як перший параметр setTimeout; якщо це було безпосередньо після t, то coffescript очікує, що в дужках будуть вкладені обидва параметри.
jankins

67
setTimeout -> 
  something param
, 1000

Це найкраще, якщо ви просто хочете використовувати анонімну функцію.
Алекс К

також для названої функції, setTimeout з ім'ямFunc, 5000
Дірк Смаверсон

Зауважте, що пробіл важливий. Виклик повинен бути розміщений точно так, як вище. Якщо something paramзнаходиться в тому ж рядку, що і setTimeout, він розбирається інакше.
henrebotha

46

Це призведе до приблизно еквівалентного перекладу (спасибі @Joel Mueller):

setTimeout (-> something param), 1000

Зауважте, що це не точний переклад, оскільки анонімна функція повертає результат виклику something(param)замість невизначеного, як у вашому фрагменті.


1
Занадто багато паронів / крапки з комою! Це CoffeeScript, позбавлення від зайвих парен - це половина пункту. setTimeout (() -> something param), 1000
Джоел Мюллер

Микола добре підкреслює, що порожні парени також необов’язкові.
Джоел Мюллер


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.