cara menulis setTimeout dengan params oleh Coffeescript

208

Tolong beritahu saya cara menulis javascript di bawah dalam coffeescript.

setTimeout(function(){
    something(param);
}, 1000);
tomodian
sumber
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
Trevor Burnham
sumber
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.

Nicholas
sumber
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
Dirk Smaverson
sumber
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.

maerics
sumber
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
Mahesh Kulkarni
sumber
3

pilihan lain:

setTimeout(
    -> something param
    1000
)
Ron
sumber