2012-09-05 13 views
10

Non riesco a trovare come eseguire una funzione che chiama un'altra funzione alla fine.Come rendere la funzione di richiamata in Coffeescript

Voglio essere in grado di fare qualcosa del genere:

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

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

Ciò che è di essere chiamato e come ricevere i dati?

risposta

17

Se si desidera chiamare MyFunc come:

MyFunc param1, param2, some_function 

Allora dovrebbe assomigliare a questo:

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

E se si vuole fare opzionale callback:

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

E se vuoi fornire uno specifico @ (AKA this), allora devi usare call o apply proprio come in JavaScript:

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

La roba (callbackParam) -> ... è solo un letterale funzione che si comporta come qualsiasi altro parametro, non c'è manipolazione come in Ruby blocco speciale (i tag suggeriscono che i blocchi di Ruby sono la fonte della tua confusione).

+0

Grazie! Era semplice – zishe

4

Ecco un pulitore, più facile da leggere e comprendere ad esempio:

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" 

Ora caricare il tuo sito web, accedere alla console, e chiamare la funzione:

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