2012-09-05 16 views
10

No puedo encontrar la forma de crear una función que llame a otra función al final.Cómo realizar la función de devolución de llamada en Coffeescript

Quiero ser capaz de hacer algo como esto:

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

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

Lo que ha de ser llamado y cómo se reciben los datos?

Respuesta

17

Si desea llamar MyFunc como:

MyFunc param1, param2, some_function 

Entonces debería tener este aspecto:

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

Y si usted quiere hacer el opcional callback:

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

Y si desea suministrar un específico @ (AKA this), entonces tendrá que utilizar call o apply al igual que en JavaScript:

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

El material (callbackParam) -> ... es sólo un literal de la función que se comporta como cualquier otro parámetro, no hay gastos de envío como en Ruby bloque especial (etiquetas sugieren que los bloques de Ruby son la fuente de tu confusión).

+0

Gracias! Fue simple. – zishe

4

Aquí es un limpiador, más fácil de leer y entender ejemplo:

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" 

Ahora carga de su sitio web, vaya a la consola, y llama a la función:

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