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);

¿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

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.


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

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.


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


3

otra opción:

setTimeout(
    -> something param
    1000
)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.