Coffeescript 从hubot脚本中的嵌套匿名函数返回结果
由于以前从未使用过coffescript,我正在尝试更新。简言之,我想调用jenkins,从该调用中获得一个结果,并在后续调用中使用它。基于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
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我修改了代码以包含回调。