comment écrire setTimeout avec des paramètres par Coffeescript

208

Veuillez me dire comment écrire javascript ci-dessous en coffeescript.

setTimeout(function(){
    something(param);
}, 1000);
tomodian
la source
comment pouvons-nous ajouter .call ('bonjour') à cela
Atul

Réponses:

214

Je pense que c'est une convention utile pour que les rappels soient le dernier argument d'une fonction. C'est généralement le cas avec l'API Node.js, par exemple. Donc, avec cela à l'esprit:

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

delay 1000, -> something param

Certes, cela ajoute la surcharge d'un appel de fonction supplémentaire à chaque que setTimeoutvous faites; mais dans les interpréteurs JS d'aujourd'hui, l'inconvénient des performances est insignifiant à moins que vous ne le fassiez des milliers de fois par seconde. (Et que faites-vous en définissant des milliers de délais d'attente par seconde, de toute façon?)

Bien sûr, une approche plus simple consiste à simplement nommer votre rappel, ce qui tend à produire un code plus lisible de toute façon (jashkenas est un grand fan de cet idiome):

callback = -> something param
setTimeout callback, 1000
Trevor Burnham
la source
Idéal sauf si vous avez besoin de rappels imbriqués
Steven Pribilinskiy
184
setTimeout ( ->
  something param
), 1000

Les parenthèses sont facultatives, mais commencer la ligne par une virgule m'a semblé compliqué.

Nicolas
la source
Sortez les parens et prenez une tasse de café, ~)
Billy Moon
4
Ne compile pas avec les parenthèses pour moi. J'ai dû les supprimer, commencer la ligne par une virgule, et cela fonctionne comme un charme.
Jeremy Thille
Avec les parenthèses, vous pouvez également le faire sur une seule ligne.
1
@JeremyThille note que l'espace entre les deux setTimeoutet la paren d'ouverture est important. L'espace signifie que les parenthèses entourent la fermeture comme premier paramètre de setTimeout; si c'était directement après le t, alors coffescript s'attendrait à ce que les parenthèses entourent les deux paramètres.
jankins
67
setTimeout -> 
  something param
, 1000
Dirk Smaverson
la source
C'est le meilleur si vous souhaitez simplement utiliser une fonction anonyme.
Alex K
également pour une fonction nommée, setTimeout namedFunc, 5000
Dirk Smaverson
Notez que les espaces blancs sont importants. L'appel doit être espacé exactement comme ci-dessus. Si something paramest sur la même ligne que setTimeout, il est analysé différemment.
henrebotha
46

Cela se traduira par une traduction à peu près équivalente (merci @Joel Mueller):

setTimeout (-> something param), 1000

Notez que ce n'est pas une traduction exacte car la fonction anonyme renvoie le résultat de l'appel something(param)au lieu d'undefined, comme dans votre extrait de code.

maerics
la source
1
Trop de parens / points-virgules! C'est CoffeeScript, se débarrasser des excès de parens est la moitié du point. setTimeout (() -> something param), 1000
Joel Mueller
Nicolas souligne que les parens vides sont également facultatifs.
Joel Mueller
12

Je trouve que c'est la meilleure méthode pour faire de même,

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

une autre option:

setTimeout(
    -> something param
    1000
)
Ron
la source