cómo escribir setTimeout con parámetros por Coffeescript

208

Por favor, dime cómo escribir JavaScript a continuación en coffeescript.

setTimeout(function(){
    something(param);
}, 1000);
tomodian
fuente
¿Cómo podemos agregar .call ('hola') a esto
Atul

Respuestas:

214

Creo que es una convención útil para las devoluciones de llamada como el último argumento para una función. Este suele ser el caso con la API Node.js, por ejemplo. Así que con eso en mente:

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

delay 1000, -> something param

Por supuesto, esto agrega la sobrecarga de una llamada de función adicional a cada setTimeoutuno que realiza; pero en los intérpretes JS de hoy, el inconveniente del rendimiento es insignificante a menos que lo esté haciendo miles de veces por segundo. (¿Y qué haces configurando miles de tiempos de espera por segundo, de todos modos?)

Por supuesto, un enfoque más directo es simplemente nombrar su devolución de llamada, que de todos modos tiende a producir un código más legible (jashkenas es un gran admirador de este idioma):

callback = -> something param
setTimeout callback, 1000
Trevor Burnham
fuente
Excelente a menos que necesite devoluciones de llamada anidadas
Steven Pribilinskiy
184
setTimeout ( ->
  something param
), 1000

Los paréntesis son opcionales, pero comenzar la línea con una coma me pareció complicado.

Nicholas
fuente
Saque a los padres y tome una taza de café, ~)
Billy Moon
44
No se compila con los paréntesis para mí. Tuve que eliminarlos, comenzar la línea con una coma y funciona de maravilla.
Jeremy Thille
Con paréntesis también puedes hacer esto en una línea.
1
@JeremyThille tenga en cuenta que el espacio intermedio setTimeouty el par de apertura es importante. El espacio allí significa que los paréntesis rodean el cierre como el primer parámetro para establecerTimeout; si fue directamente después de t, entonces coffescript esperaría que los paréntesis encierren ambos parámetros.
Jankins
67
setTimeout -> 
  something param
, 1000
Dirk Smaverson
fuente
Esto es lo mejor si solo quieres usar una función anónima.
Alex K
también para una función con nombre, setTimeout namedFunc, 5000
Dirk Smaverson
Tenga en cuenta que el espacio en blanco es importante. La llamada debe estar espaciada exactamente como se indica arriba. Si something paramestá en la misma línea que setTimeout, se analiza de manera diferente.
henrebotha 01 de
46

Esto dará como resultado una traducción más o menos equivalente (gracias @ Joel Mueller):

setTimeout (-> something param), 1000

Tenga en cuenta que esta no es una traducción exacta porque la función anónima devuelve el resultado de la llamada en something(param)lugar de indefinido, como en su fragmento.

maerics
fuente
1
¡Demasiados parens / punto y coma! Este es CoffeeScript, deshacerse del exceso de padres es la mitad del punto. setTimeout (() -> something param), 1000
Joel Mueller
Nicholas señala que los parens vacíos también son opcionales.
Joel Mueller
12

Este es el mejor método para hacer lo mismo.

setTimeout (-> alert "hi"), 1000
Mahesh Kulkarni
fuente
3

otra opción:

setTimeout(
    -> something param
    1000
)
Ron
fuente