2012-09-05 12 views
10

Sonunda başka bir işlevi çağıran bir işlevin nasıl yapıldığını öğrenemiyorum.Coffeescript'te geri arama işlevi nasıl yapılır

Böyle bir şey yapabilmek istiyorum: Ne

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

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

çağrılacak gelmiştir ve nasıl veri alır? bu gibi görünmelidir Sonra

MyFunc param1, param2, some_function 

:

cevap

17

siz MyFunc aramak isterseniz

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

:

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

Ve callback opsiyonel yapmak istiyorsanız Ve eğer belirli bir @ (AKA) tedarik etmek istiyorsanız), o zaman sadece JavaScript gibi call veya apply kullanmak:

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

(callbackParam) -> ... şeyler Diğer parametrelerde gibi davranır, Ruby gibi işleme özel blok var ki literal sadece bir fonksiyondur (senin etiketleri önermek Ruby blokları karışıklığınızın kaynağıdır.

+0

Teşekkür! Çok basitti. – zishe

4

Burada okumak ve örnek anlamak daha kolay bir temizleyici, var:

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" 

Şimdi Web sitenizin yükleme, konsola gidin ve işlevini çağırır:

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