2011-06-23 19 views
195

Por favor dígame cómo escribir javascript a continuación en coffeescript.cómo escribir setTimeout con params por Coffeescript

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

Volví a la pregunta, no es que fuera exactamente lo que estaba buscando, pero las respuestas me llevan en la dirección correcta. – MikeScott8

+1

Esta es una gran pregunta; es uno de los pocos que me están ayudando a descubrir las limitaciones de Coffeescript (como lo es ahora). – thure

+0

¿cómo podemos agregar .call ('hello') a este – Atul

Respuesta

205

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

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

delay 1000, -> something param 

Por supuesto, esto se suma la sobrecarga de una llamada de función extra para cada setTimeout haces; pero en los intérpretes JS de hoy en día, el inconveniente de rendimiento es insignificante a menos que lo haga miles de veces por segundo. (¿Y qué haces estableciendo miles de tiempos de espera por segundo, de todos modos?)

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

callback = -> something param 
setTimeout callback, 1000 
+0

Excelente a menos que necesite devoluciones de llamada anidadas –

+0

¡¡¡Buena respuesta !!!! –

44

Esto resultará en una traducción más o menos equivalente (gracias @ Joel Mueller):

setTimeout (-> something param), 1000 

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

+1

Demasiados parens/punto y coma! Esto es CoffeeScript, deshacerse del exceso de parens es la mitad del punto. 'setTimeout (() -> algo param), 1000' –

+0

@Joel Mueller: gracias, he actualizado mi respuesta. – maerics

+0

Nicholas hace un buen punto que los parens vacíos también son opcionales. –

174
setTimeout (-> 
    something param 
), 1000 

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

+0

Gracias. Coffeescript a veces me fastidia porque el código es muy limpio. – tomodian

+0

Saque los parens, y tome una taza de café, ~) –

+20

no está limpio si lo arruina, simplemente diciendo :) – Kevin

60
setTimeout -> 
    something param 
, 1000 
+0

Esto es lo mejor si solo quiere usar una función anónima. –

+0

también para una función con nombre, setTimeout namedFunc, 5000 –

+0

Tenga en cuenta que el espacio en blanco es importante. La llamada debe estar espaciada exactamente como arriba. Si 'something param' está en la misma línea que' setTimeout', se analiza de forma diferente. – henrebotha

3

otra opción:

setTimeout(
    -> something param 
    1000 
) 
12

me parece el mejor método para hacer lo mismo,

setTimeout (-> alert "hi"), 1000 
+0

me gusta este guión en línea –