Как сделать функцию обратного вызова в Coffeescript

Я не могу узнать, как сделать функцию, которая вызывает другую функцию в конце.

Я хочу сделать что-то вроде этого:

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

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

Что нужно назвать и как он получает данные?

Ответ 1

Если вы хотите вызвать MyFunc как:

MyFunc param1, param2, some_function

Затем он должен выглядеть так:

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

И если вы хотите сделать callback необязательным:

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

И если вы хотите указать конкретный @ (AKA this), вы должны использовать call или apply, как в JavaScript:

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

Материал (callbackParam) -> ... - это просто литерал функции, который действует как любой другой параметр, в Ruby нет специальной обработки блоков (ваши теги предполагают, что блоки Ruby являются источником вашей путаницы).

Ответ 2

Здесь более чистый, понятный и понятный пример:

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"

Теперь загрузите свой веб-сайт, перейдите на консоль и вызовите функцию:

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