Coffeescript tarafından params ile setTimeout nasıl yazılır


208

Lütfen bana javascript'i nasıl kahve yazacağımı söyleyin.

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

buna nasıl .call ('merhaba') ekleyebiliriz
Atul

Yanıtlar:


214

Bence geri çağrıların bir işleve son argüman olarak gelmesi faydalı bir kural. Bu genellikle örneğin Node.js API'sinde geçerlidir. Bunu akılda tutarak:

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

delay 1000, -> something param

Bu, setTimeoutyaptığınız her işleve ekstra bir işlev çağrısının ek yükünü ekler ; ancak günümüzün JS yorumlayıcılarında, saniyede binlerce kez yapmadığınız sürece performans dezavantajı önemsizdir. (Her neyse, saniyede binlerce zaman aşımı ayarlamak ne yapıyorsunuz?)

Tabii ki, daha basit bir yaklaşım, zaten daha okunabilir kod üretme eğiliminde olan geri aramanızı adlandırmaktır (jashkenas bu deyimin büyük bir hayranıdır):

callback = -> something param
setTimeout callback, 1000

İç içe geçmiş geri aramalara ihtiyacınız yoksa
Steven Pribilinskiy

184
setTimeout ( ->
  something param
), 1000

Parantezler isteğe bağlıdır, ancak çizgiyi virgülle başlatmak benim için dağınık görünüyordu.


Parensi çıkar ve bir fincan kahve iç, ~)
Billy Moon

4
Benim için parantez ile derlenmiyor. Onları kaldırmak, virgülle çizgiye başlamak zorunda kaldım ve bir cazibe gibi çalışıyor.
Jeremy Thille

Parantez ile bunu tek bir satırda da yapabilirsiniz.

1
@ JererThille, aradaki boşluğun setTimeoutve açılış pareninin önemli olduğunu unutmayın . Buradaki boşluk parantezlerin setTimeout için ilk parametre olarak kapatmayı çevrelediği anlamına gelir; t'den hemen sonra olsaydı, tabut parantezin her iki parametreyi de kapsamasını beklerdi.
jankins

67
setTimeout -> 
  something param
, 1000

Anonim bir işlev kullanmak istiyorsanız bu en iyisidir.
Alex K

ayrıca adlandırılmış bir işlev için setTimeout adlı işlevFunc, 5000
Dirk Smaverson

Boşluğun önemli olduğunu unutmayın. Çağrı tam olarak yukarıdaki gibi aralıklandırılmalıdır. Eğer something paramaynı hat üzerindedir setTimeouto farklı çözümlenen alır.
henrebotha

46

Bu kabaca eşdeğer bir çeviri ile sonuçlanacaktır (teşekkürler @Joel Mueller):

setTimeout (-> something param), 1000

Bunun tam bir çeviri olmadığına dikkat edin, çünkü anonim işlev something(param)snippet'inizde olduğu gibi tanımsız yerine çağrı sonucunu döndürür .


1
Çok fazla ebeveyn / noktalı virgül! Bu CoffeeScript, fazla parenslerden kurtulmanın yarısı. setTimeout (() -> something param), 1000
Joel Mueller

Nicholas, boş parenslerin de isteğe bağlı olduğu konusunda iyi bir noktaya değiniyor.
Joel Mueller

12

Bunu aynı şeyi yapmanın en iyi yolu olarak görüyorum,

setTimeout (-> alert "hi"), 1000

3

başka seçenek:

setTimeout(
    -> something param
    1000
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.