在nodejs上的coffeescript中我的Hubot适配器中的奇怪行为

时间:2014-01-16 11:15:20

标签: node.js coffeescript hubot

我正在为我的公司聊天系统开发Hubot适配器。以下代码的输出非常令人惊讶,我不知道下一步该去哪里。没有运行时错误(据我所知)

输出:

connect console
DEBUG connect logger
posted console

代码:

connect: ->
  console.log 'connect console'
  @logger.debug 'connect logger'

  @jsonClient.post 'Route/WebService/Json/Login', loginRequest, (err, res, body) ->
    console.log 'posted console'
    @logger.debug 'posted logger'

1 个答案:

答案 0 :(得分:1)

如果您希望@在回调函数内部与外部相同,则使用fat-arrow (=>)定义回调:

@jsonClient.post 'Route/WebService/Json/Login', loginRequest, (err, res, body) =>
  #...

请记住,(Coffee | Java)脚本函数中的@(AKA this)取决于函数的调用方式,而不是函数的定义方式和位置(当然,除非你有一个约束功能......)。如果您使用=>来定义该函数,那么它将绑定到当前@@logger,并且@jsonClient将是您希望它们在回调中的内容。< / p>

您也可以使用Function.bind

callback = (err, res, body) ->
  console.log 'posted console'
  @logger.debug 'posted logger'

@jsonClient.post 'Route/WebService/Json/Login', loginRequest, callback.bind(@)

如果你想要原生解决方案。