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.