11

我不知道如何制作一个最后调用另一个函数的函数。

我希望能够做这样的事情:

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

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

必须调用什么以及它如何接收数据?

4

2 回答 2

17

如果您想调用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),那么你会使用callapply就像在 JavaScript 中一样:

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

这些(callbackParam) -> ...东西只是一个函数文字,其作用类似于任何其他参数,没有像 Ruby 中那样的特殊块处理(您的标签表明 Ruby 块是您混淆的根源)。

于 2012-09-05T03:05:24.477 回答
5

这是一个更简洁、更易于阅读和理解的示例:

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"
于 2016-09-02T14:43:04.247 回答