как написать setTimeout с помощью Coffeescript - PullRequest
205 голосов
/ 23 июня 2011

Пожалуйста, скажите мне, как написать javascript ниже в coffeescript.

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

Ответы [ 6 ]

209 голосов
/ 24 июня 2011

Я думаю, что обратные вызовы являются последним аргументом функции. Это обычно имеет место, например, с API-интерфейсом Node.js. Итак, имея в виду:

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

delay 1000, -> something param

Конечно, это добавляет издержки дополнительного вызова функции к каждому setTimeout, который вы делаете; но в современных интерпретаторах JS недостаток производительности незначителен, если вы не делаете это тысячи раз в секунду. (И вообще, что вы делаете, устанавливая тысячи тайм-аутов в секунду?)

Конечно, более простой подход состоит в том, чтобы просто назвать ваш обратный вызов, который в любом случае имеет тенденцию создавать более читаемый код (jashkenas - большой поклонник этой идиомы):

callback = -> something param
setTimeout callback, 1000
180 голосов
/ 23 июня 2011
setTimeout ( ->
  something param
), 1000

Скобки не обязательны, но начало строки с запятой мне показалось грязным.

66 голосов
/ 30 ноября 2012
setTimeout -> 
  something param
, 1000
46 голосов
/ 23 июня 2011

Это приведет к примерно эквивалентному переводу (спасибо @Joel Mueller):

setTimeout (-> something param), 1000

Обратите внимание, что это не точный перевод, потому что анонимная функция возвращает результат вызова something(param) вместо undefined, как в вашем фрагменте.

12 голосов
/ 09 июня 2013

Я считаю, что это лучший способ сделать то же самое,

setTimeout (-> alert "hi"), 1000
3 голосов
/ 05 февраля 2013

другой вариант:

setTimeout(
    -> something param
    1000
)
...