como escrever setTimeout com parâmetros por Coffeescript


208

Diga-me como escrever javascript abaixo em coffeescript.

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

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

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


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

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


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

3

outra opção:

setTimeout(
    -> something param
    1000
)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.