come scrivere setTimeout con i parametri di Coffeescript


208

Per favore, dimmi come scrivere JavaScript sotto in coffeescript.

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

come possiamo aggiungere .call ('ciao') a questo
Atul

Risposte:


214

Penso che sia una convenzione utile per i callback come ultimo argomento di una funzione. Questo di solito è il caso dell'API Node.js, ad esempio. Quindi con questo in mente:

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

delay 1000, -> something param

Concesso, questo aggiunge l'overhead di una chiamata di funzione extra a tutti setTimeout effettuata; ma negli interpreti JS di oggi, l'inconveniente delle prestazioni è insignificante a meno che non lo si faccia migliaia di volte al secondo. (E cosa stai facendo impostando migliaia di timeout al secondo, comunque?)

Naturalmente, un approccio più diretto è semplicemente nominare il callback, che tende comunque a produrre codice più leggibile (jashkenas è un grande fan di questo idioma):

callback = -> something param
setTimeout callback, 1000

Ottimo se non hai bisogno di richiamate nidificate
Steven Pribilinskiy,

184
setTimeout ( ->
  something param
), 1000

Le parentesi sono opzionali, ma iniziare la riga con una virgola mi è sembrato disordinato.


Elimina i genitori e prendi una tazza di caffè, ~)
Billy Moon,

4
Non si compila con le parentesi per me. Ho dovuto rimuoverli, iniziare la linea con una virgola e funziona come un incantesimo.
Jeremy Thille,

Con le parentesi puoi anche farlo in una riga.

1
@JeremyThille nota che lo spazio tra setTimeoute l'apertura iniziale è importante. Lo spazio lì indica che le parentesi circondano la chiusura come primo parametro a setTimeout; se fosse direttamente dopo la t, allora il coffescript avrebbe previsto che le parentesi racchiudessero entrambi i parametri.
jankins

67
setTimeout -> 
  something param
, 1000

Questo è il migliore se vuoi solo usare una funzione anonima.
Alex K,

anche per una funzione con nome, setTimeout denominatoFunc, 5000
Dirk Smaverson,

Si noti che gli spazi bianchi sono importanti. La chiamata deve essere spaziata esattamente come sopra. Se si something paramtrova sulla stessa riga setTimeout, viene analizzato in modo diverso.
henrebotha,

46

Ciò si tradurrà in una traduzione approssimativamente equivalente (grazie a @Joel Mueller):

setTimeout (-> something param), 1000

Nota che questa non è una traduzione esatta perché la funzione anonima restituisce il risultato della chiamata something(param)anziché non definito, come nel tuo frammento.


1
Troppe parentesi / punti e virgola! Questo è CoffeeScript, eliminare le parentesi in eccesso è la metà del punto. setTimeout (() -> something param), 1000
Joel Mueller,

Nicholas sottolinea che anche le parentesi vuote sono opzionali.
Joel Mueller,

12

Trovo che questo sia il metodo migliore per fare lo stesso,

setTimeout (-> alert "hi"), 1000

3

un'altra opzione:

setTimeout(
    -> something param
    1000
)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.