2012-09-05 11 views
10

Ich kann nicht herausfinden, wie man eine Funktion, die eine andere Funktion am Ende ruft.Wie Callback-Funktion in Coffeescript

Ich möchte in der Lage sein, so etwas zu tun:

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

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

Was genannt werden muss und wie er die Daten erhalten?

Antwort

17

Wenn Sie MyFunc nennen wie:

MyFunc param1, param2, some_function 

es dann sollte wie folgt aussehen:

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

Und wenn Sie wollen, dass die callback optional machen:

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

Und wenn Sie eine bestimmte @ (AKA this), dann würden Sie call oder apply wie in JavaScript verwenden:

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

Das (callbackParam) -> ... Zeug ist nur ein Funktionsliteral dass verhält sich wie jeder andere Parameter gibt in Ruby (Ihre Tags vorschlagen wie Handhabung keine speziellen Block ist dass Ruby Blöcke die Quelle deiner Verwirrung sind).

+0

Dank! Es war einfach. – zishe

4

Hier ist ein sauberer, einfacher zu lesen und verstehen Beispiel:

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" 

jetzt Ihre Website laden, auf die Konsole gehen, und rufen Sie die Funktion:

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