cara menulis setTimeout dengan params oleh Coffeescript


208

Tolong beritahu saya cara menulis javascript di bawah dalam coffeescript.

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

bagaimana kita bisa menambahkan .call ('hello') ke ini
Atul

Jawaban:


214

Saya pikir ini adalah konvensi yang berguna untuk callback yang akan datang sebagai argumen terakhir untuk suatu fungsi. Ini biasanya terjadi dengan API Node.js, misalnya. Maka dengan itu dalam pikiran:

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

delay 1000, -> something param

Memang, ini menambahkan overhead panggilan fungsi ekstra untuk setiap yang setTimeoutAnda lakukan; tetapi dalam penerjemah JS hari ini, kelemahan kinerja tidak signifikan kecuali Anda melakukannya ribuan kali per detik. (Lagi pula, apa yang Anda lakukan dengan menetapkan batas waktu mati per detik?)

Tentu saja, pendekatan yang lebih mudah adalah dengan menyebut nama panggilan balik Anda, yang cenderung menghasilkan kode yang lebih mudah dibaca (jashkenas adalah penggemar berat idiom ini):

callback = -> something param
setTimeout callback, 1000

Hebat kecuali Anda membutuhkan panggilan balik bersarang
Steven Pribilinskiy

184
setTimeout ( ->
  something param
), 1000

Tanda kurung adalah opsional, tetapi memulai baris dengan koma tampak berantakan bagi saya.


Keluarkan parensnya, dan nikmati secangkir kopi, ~)
Billy Moon

4
Tidak mengkompilasi dengan tanda kurung untuk saya. Saya harus menghapusnya, memulai garis dengan koma, dan itu berfungsi seperti pesona.
Jeremy Thille

Dengan tanda kurung Anda juga dapat melakukan ini dalam satu baris.

1
@JeremyThille perhatikan bahwa ruang di antara setTimeoutdan paren pembuka penting. Ruang di sana berarti tanda kurung mengelilingi penutupan sebagai parameter pertama ke setTimeout; jika langsung setelah t maka coffescript akan mengharapkan tanda kurung untuk melampirkan kedua parameter.
jankins

67
setTimeout -> 
  something param
, 1000

Ini adalah yang terbaik jika Anda hanya ingin menggunakan fungsi anonim.
Alex K

juga untuk fungsi bernama, setTimeout namedFunc, 5000
Dirk Smaverson

Perhatikan bahwa spasi putih penting. Panggilan harus ditempatkan tepat seperti di atas. Jika something paramberada pada baris yang sama dengan setTimeout, ia akan diuraikan secara berbeda.
henrebotha

46

Ini akan menghasilkan terjemahan yang kurang lebih setara (terima kasih @ Joel Mueller):

setTimeout (-> something param), 1000

Perhatikan bahwa ini bukan terjemahan yang tepat karena fungsi anonim mengembalikan hasil panggilan something(param)alih-alih tidak ditentukan, seperti dalam cuplikan Anda.


1
Terlalu banyak orangtua / titik koma! Ini CoffeeScript, menghilangkan kelebihan parens adalah setengah dari intinya. setTimeout (() -> something param), 1000
Joel Mueller

Nicholas menunjukkan bahwa parens yang kosong juga opsional.
Joel Mueller

12

Saya menemukan ini metode terbaik untuk melakukan hal yang sama,

setTimeout (-> alert "hi"), 1000

3

pilihan lain:

setTimeout(
    -> something param
    1000
)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.