我有以下函数签名:
question: (question_id, onComplete, use_redis = true) ->我假设我可以将use_redis参数重写为false,但是我尝试过的所有方法都还不起作用。如果我以内联方式定义我的onComplete回调,这是可能的吗?下面是我对该函数的调用:
Summaryresults.question 1, (summary) ->
answer_data.summary = summary
done()我尝试了几种不同的方式添加false,但都不起作用。我是否需要在其他地方定义我的回调函数,然后引用它,而不是内联定义它来覆盖use_redis
发布于 2013-01-03 02:20:39
应该是这样工作的:
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在调用此函数时,应始终将回调作为最后一个参数:
不使用_redis-param:
Summaryresults.question 1, (summary) ->
answer_data.summary = summary
done()使用use_redis-param:
Summaryresults.question 1, false, (summary) ->
answer_data.summary = summary
done()发布于 2013-01-03 02:20:40
通常,您希望回调作为最后一个参数,否则语法会变得不可靠。
那么为什么不改变你的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, falsehttps://stackoverflow.com/questions/14126981
复制相似问题