1

我有以下函数签名:

question: (question_id, onComplete, use_redis = true) ->

我假设我可以将use_redis参数覆盖为 false,但我尝试过的所有方法都没有奏效。如果我onComplete内联定义我的回调,这可能吗?这就是我对函数的调用:

Summaryresults.question 1, (summary) ->
    answer_data.summary = summary
    done()

我试过添加false几种不同的方法,但没有任何效果。我是否需要在其他地方定义我的回调函数,然后引用它而不是内联定义它以覆盖use_redis

4

2 回答 2

2

应该这样工作:

Summaryresults.question 1, (summary) ->
  answer_data.summary = summary
  done()
, false

第一个参数是 id,第二个是你的回调函数,第三个设置 use_redis 为 false

编辑 - 我更改 api 的解决方案:

question: (id, options...) ->
  [use_redis, onComplete] = options
  if typeof use_redis is "function"
    onComplete = options
    use_redis = true

调用此函数时,您应该始终将回调作为 LAST 参数:

没有 use_redis 参数:

Summaryresults.question 1, (summary) ->
  answer_data.summary = summary
  done()

使用 use_redis 参数:

Summaryresults.question 1, false, (summary) ->
  answer_data.summary = summary
  done()
于 2013-01-02T18:20:38.513 回答
2

通常,您希望回调成为最后一个参数,否则语法会变得很奇怪。

那么为什么不改变你的 API 呢?

question: (question_id, options = {}) ->
  onComplete = options.onComplete
  useRedis = options.useRedis ? true
  # ...

Summaryresults.question 1,
  useRedis: false
  onComplete: ->
    answer_data.summary = summary
    done()

看看这有多少可读性?


但话虽如此,您可以在正确的位置使用时髦的逗号调用

Summaryresults.question 1, (summary) ->
  answer_data.summary = summary
  done()
, false

编译为:

Summaryresults.question(1, function(summary) {
  answer_data.summary = summary;
  return done();
}, false);

也许

hollaback = (summary) ->
  answer_data.summary = summary
  done()

Summaryresults.question 1, hollaback, false
于 2013-01-02T18:20:40.433 回答