Cách viết setTimeout với params bằng Coffeescript


208

Xin vui lòng cho tôi biết làm thế nào để viết javascript dưới đây trong coffeescript.

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

làm thế nào chúng ta có thể thêm .call ('xin chào') vào đây
Atul

Câu trả lời:


214

Tôi nghĩ rằng đó là một quy ước hữu ích cho các cuộc gọi lại để trở thành đối số cuối cùng cho một chức năng. Ví dụ, đây thường là trường hợp với API Node.js. Vì vậy, với ý nghĩ đó:

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

delay 1000, -> something param

Cấp, điều này thêm chi phí của một cuộc gọi chức năng bổ sung cho mỗi setTimeoutbạn thực hiện; nhưng trong các trình thông dịch JS ngày nay, nhược điểm về hiệu năng là không đáng kể trừ khi bạn thực hiện nó hàng nghìn lần mỗi giây. (Và bạn đang làm gì để thiết lập hàng ngàn thời gian chờ mỗi giây, dù sao?)

Tất nhiên, một cách tiếp cận đơn giản hơn là chỉ cần đặt tên cho cuộc gọi lại của bạn, điều này có xu hướng tạo ra mã dễ đọc hơn (jashkenas là một fan hâm mộ lớn của thành ngữ này):

callback = -> something param
setTimeout callback, 1000

Tuyệt vời trừ khi bạn cần các cuộc gọi lại lồng nhau
Steven Pribilinskiy

184
setTimeout ( ->
  something param
), 1000

Các dấu ngoặc là tùy chọn, nhưng bắt đầu dòng bằng dấu phẩy có vẻ lộn xộn đối với tôi.


Lấy ra các parens và uống một tách cà phê, ~)
Billy Moon

4
Không biên dịch với dấu ngoặc đơn cho tôi. Tôi đã phải loại bỏ chúng, bắt đầu dòng bằng dấu phẩy và nó hoạt động như một lá bùa.
Jeremy Thille

Với dấu ngoặc đơn, bạn cũng có thể làm điều này trong một dòng.

1
@JeremyThille lưu ý rằng khoảng trống ở giữa setTimeoutvà paren mở rất quan trọng. Không gian ở đó có nghĩa là dấu ngoặc đơn bao quanh bao đóng làm tham số đầu tiên cho setTimeout; nếu nó trực tiếp sau t thì coffescript sẽ mong các dấu ngoặc đơn kèm theo cả hai tham số.
jankins

67
setTimeout -> 
  something param
, 1000

Điều này là tốt nhất nếu bạn chỉ muốn sử dụng một chức năng ẩn danh.
Alex K

cũng cho một chức năng được đặt tên, setTimeout có tênFunc, 5000
Dirk Smaverson

Lưu ý rằng khoảng trắng là quan trọng. Cuộc gọi phải được đặt chính xác như trên. Nếu something paramtrên cùng một dòng với setTimeout, nó được phân tích cú pháp khác nhau.
henrebotha

46

Điều này sẽ dẫn đến một bản dịch gần tương đương (cảm ơn @Joel Mueller):

setTimeout (-> something param), 1000

Lưu ý rằng đây không phải là bản dịch chính xác vì hàm ẩn danh trả về kết quả của cuộc gọi something(param)thay vì không xác định, như trong đoạn trích của bạn.


1
Quá nhiều parens / dấu chấm phẩy! Đây là CoffeeScript, loại bỏ các parens thừa là một nửa điểm. setTimeout (() -> something param), 1000
Joel Mueller

Nicholas đưa ra một điểm tốt là các parens trống cũng là tùy chọn.
Joel Mueller

12

Tôi thấy đây là phương pháp tốt nhất để làm điều tương tự,

setTimeout (-> alert "hi"), 1000

3

tùy chọn khác:

setTimeout(
    -> something param
    1000
)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.