Coffeescript 从hubot脚本中的嵌套匿名函数返回结果

Coffeescript 从hubot脚本中的嵌套匿名函数返回结果,coffeescript,hubot,Coffeescript,Hubot,由于以前从未使用过coffescript,我正在尝试更新。简言之,我想调用jenkins,从该调用中获得一个结果,并在后续调用中使用它。基于hubot脚本中的现有代码,我添加了以下函数: jenkinsCrumb = (msg) -> url = process.env.HUBOT_JENKINS_URL path = "#{url}/crumbIssuer/api/json" req = msg.http(path) if process.env.HU

由于以前从未使用过coffescript,我正在尝试更新。简言之,我想调用jenkins,从该调用中获得一个结果,并在后续调用中使用它。基于hubot脚本中的现有代码,我添加了以下函数:

jenkinsCrumb = (msg) ->
    url = process.env.HUBOT_JENKINS_URL
    path = "#{url}/crumbIssuer/api/json"

    req = msg.http(path)

    if process.env.HUBOT_JENKINS_AUTH
      auth = new Buffer(process.env.HUBOT_JENKINS_AUTH).toString('base64')
      req.headers Authorization: "Basic #{auth}"

    req.get() (err, res, body) ->
        if err
          msg.reply "Jenkins says: #{err}"
        else if 200 <= res.statusCode < 400 # Or, not an error code.
          msg.reply "#{body}"
          body
        else if 404 == res.statusCode
          msg.reply "Unable to fetch crumb from Jenkins..."
        else
          msg.reply "Jenkins says: Status #{res.statusCode} #{body}"
jenkinsCrumb = (msg, callback) ->
    url = process.env.HUBOT_JENKINS_URL
    path = "#{url}/crumbIssuer/api/json"

    req = msg.http(path)

    if process.env.HUBOT_JENKINS_AUTH
      auth = new Buffer(process.env.HUBOT_JENKINS_AUTH).toString('base64')
      req.headers Authorization: "Basic #{auth}"

    req.get() (err, res, body) ->
        if err
          msg.reply "Jenkins says: #{err}"
        else if 200 <= res.statusCode < 400 # Or, not an error code.
          msg.reply "#{body}"
          body
        else if 404 == res.statusCode
          msg.reply "Unable to fetch crumb from Jenkins..."
        else
          msg.reply "Jenkins says: Status #{res.statusCode} #{body}"

        # critical part
        callback(body)
jenkinscrump=(msg)->
url=process.env.HUBOT\u JENKINS\u url
path=“#{url}/crumbisuser/api/json”
req=msg.http(路径)
如果process.env.HUBOT\u JENKINS\u AUTH
auth=新缓冲区(process.env.HUBOT\u JENKINS\u auth).toString('base64'))
req.headers授权:“基本#{auth}”
请求获取()(错误、恢复、正文)->
如果出错
msg.reply“詹金斯说:{err}”

否则,如果200,您只需在匿名函数的末尾添加
返回body
body
(因为有CoffeeScript)即可:

jenkinsCrumb = (msg) ->
    url = process.env.HUBOT_JENKINS_URL
    path = "#{url}/crumbIssuer/api/json"

    req = msg.http(path)

    if process.env.HUBOT_JENKINS_AUTH
      auth = new Buffer(process.env.HUBOT_JENKINS_AUTH).toString('base64')
      req.headers Authorization: "Basic #{auth}"

    req.get() (err, res, body) ->
        if err
          msg.reply "Jenkins says: #{err}"
        else if 200 <= res.statusCode < 400 # Or, not an error code.
          msg.reply "#{body}"
          body
        else if 404 == res.statusCode
          msg.reply "Unable to fetch crumb from Jenkins..."
        else
          msg.reply "Jenkins says: Status #{res.statusCode} #{body}"
jenkinsCrumb = (msg, callback) ->
    url = process.env.HUBOT_JENKINS_URL
    path = "#{url}/crumbIssuer/api/json"

    req = msg.http(path)

    if process.env.HUBOT_JENKINS_AUTH
      auth = new Buffer(process.env.HUBOT_JENKINS_AUTH).toString('base64')
      req.headers Authorization: "Basic #{auth}"

    req.get() (err, res, body) ->
        if err
          msg.reply "Jenkins says: #{err}"
        else if 200 <= res.statusCode < 400 # Or, not an error code.
          msg.reply "#{body}"
          body
        else if 404 == res.statusCode
          msg.reply "Unable to fetch crumb from Jenkins..."
        else
          msg.reply "Jenkins says: Status #{res.statusCode} #{body}"

        # critical part
        callback(body)
jenkinsCrumb=(消息,回调)->
url=process.env.HUBOT\u JENKINS\u url
path=“#{url}/crumbisuser/api/json”
req=msg.http(路径)
如果process.env.HUBOT\u JENKINS\u AUTH
auth=新缓冲区(process.env.HUBOT\u JENKINS\u auth).toString('base64'))
req.headers授权:“基本#{auth}”
请求获取()(错误、恢复、正文)->
如果出错
msg.reply“詹金斯说:{err}”

否则,如果有必要指出他缺少的东西:默认情况下,Coffee返回块中的最后一个值。因此,在他的第一个例子中,它返回
req.get
函数(我想)。@jcollum-这似乎正是正在发生的事情。我尝试了@ccg建议的方法,但我仍然得到的显然是从
req.get()
返回的JSON块,而不是
body
。那么,我如何返回
body
中的内容,而不是
req.get()
返回的内容呢?如果
jenkinsCrumb
需要返回
body
,它将需要接收回调并将
body
返回到该回调(如
done(body)
);既然@ccg已经让你有了95%的成功率,我会要求他修改他的代码来完成that@jcollum我修改了代码以包含回调。