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

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

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é.


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

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.


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

3

une autre option:

setTimeout(
    -> something param
    1000
)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.