como escrever setTimeout com parâmetros por Coffeescript

208

Diga-me como escrever javascript abaixo em coffeescript.

setTimeout(function(){
    something(param);
}, 1000);
tomodiano
fonte
como podemos adicionar .Call ( 'Olá') a este
Atul

Respostas:

214

Eu acho que é uma convenção útil para retornos de chamada virem como o último argumento para uma função. Geralmente é o caso da API do Node.js., por exemplo. Então, com isso em mente:

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

delay 1000, -> something param

Concedido, isso adiciona a sobrecarga de uma chamada de função extra para cada coisa que setTimeoutvocê faz; mas nos intérpretes JS de hoje, a desvantagem do desempenho é insignificante, a menos que você o faça milhares de vezes por segundo. (E o que você está fazendo definindo milhares de tempos limite por segundo, afinal?)

Obviamente, uma abordagem mais direta é simplesmente nomear seu retorno de chamada, o que tende a produzir código mais legível de qualquer maneira (jashkenas é um grande fã desse idioma):

callback = -> something param
setTimeout callback, 1000
Trevor Burnham
fonte
Ótimo, a menos que você precise de retornos de chamada aninhados
Steven Pribilinskiy
184
setTimeout ( ->
  something param
), 1000

Os parênteses são opcionais, mas iniciar a linha com uma vírgula me pareceu confuso.

Nicholas
fonte
Retire os parênteses, e possuem uma xícara de café, ~)
Billy Lua
4
Não compila com os parênteses para mim. Eu tive que removê-los, iniciar a linha com uma vírgula, e funciona como um encanto.
precisa saber é o seguinte
Com parênteses, você também pode fazer isso em uma linha.
1
@ JeremyThille notou que o espaço intermediário setTimeoute o ponto inicial é importante. O espaço ali significa que os parênteses estão ao redor do fechamento como o primeiro parâmetro a setTimeout; se fosse logo após o t, o coffescript esperaria que os parênteses incluíssem os dois parâmetros.
Jankins
67
setTimeout -> 
  something param
, 1000
Dirk Smaverson
fonte
É o melhor se você quiser apenas usar uma função anônima.
Alex K
também para uma função nomeada, setTimeout namedFunc, 5000
Dirk Smaverson 13/13
Observe que espaço em branco é importante. A chamada deve ser espaçada exatamente como acima. Se something paramestiver na mesma linha que setTimeout, será analisado de maneira diferente.
Henrebotha
46

Isso resultará em uma tradução aproximadamente equivalente (obrigado @Joel Mueller):

setTimeout (-> something param), 1000

Observe que essa não é uma tradução exata porque a função anônima retorna o resultado da chamada em something(param)vez de indefinida, como no seu snippet.

maerics
fonte
1
Parens / ponto e vírgula demais! Este é o CoffeeScript, livrar-se do excesso de parênteses é metade do ponto. setTimeout (() -> something param), 1000
Joel Mueller
Nicholas enfatiza que os parênteses vazios também são opcionais.
Joel Mueller
12

Acho esse o melhor método para fazer o mesmo,

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

outra opção:

setTimeout(
    -> something param
    1000
)
Ron
fonte