2012-09-05 17 views
10

Tôi không thể tìm hiểu cách thực hiện một hàm gọi một hàm khác ở cuối.Cách thực hiện chức năng gọi lại trong Coffeescript

Tôi muốn để có thể làm điều gì đó như thế này:

book.save (err) -> 
    MyFunc param1, param2, (callbackParam) -> 
    # some code using callbackParam 

MyFunc = (param1, param2) -> 
    # some other code that defines callbackParam 
    ?.call(callbackParam) 

gì đã được gọi và làm thế nào để nó nhận được dữ liệu?

Trả lời

17

Nếu bạn muốn gọi MyFunc như:

MyFunc param1, param2, some_function 

Sau đó, nó sẽ giống như thế này:

MyFunc = (param1, param2, callback) -> 
    # some code that defines callbackParam 
    callback callbackParam 

Và nếu bạn muốn làm cho callback tùy chọn:

MyFunc = (param1, param2, callback) -> 
    # some code that defines callbackParam 
    callback? callbackParam 

Và nếu bạn muốn cung cấp @ cụ thể (AKA this), sau đó bạn muốn sử dụng call hoặc apply giống như trong JavaScript:

MyFunc = (param1, param2, callback) -> 
    # some code that defines callbackParam 
    callback?.call your_this_object, callbackParam 

Những thứ (callbackParam) -> ... chỉ là một chức năng theo nghĩa đen mà hành vi giống như bất kỳ tham số khác, không có khối đặc biệt xử lý như thế nào trong Ruby (thẻ của bạn gợi ý rằng các khối Ruby là nguồn gốc của sự nhầm lẫn của bạn).

+0

Cảm ơn! Nó thật đơn giản. – zishe

4

Dưới đây là một trình dọn dẹp, dễ dàng hơn để đọc và hiểu ví dụ:

some_function = (callback) -> 
    param1 = "This is param1" 
    param2 = "This is param2" 
    callback(param1, param2) 

callback = (param1, param2) -> 
    console.log(param1) 
    console.log(param2) 

@tester = -> 
    some_function(callback) 
    "done" 

Bây giờ tải trang web của bạn, đi đến giao diện điều khiển, và gọi hàm:

> tester() 
    This is param1 
    This is param2 
< "done"