我是一个完整的新手,如果这是一个愚蠢的问题,那就很抱歉。
我正在写一个Hubot脚本。我不明白我做错了什么。我需要一些帮助。我正试图从美国职业棒球大联盟获得分数。
我有这个......
module.exports = (robot) ->
robot.hear /score/i, (msg) ->
url = 'http://mlb.mlb.com/gdcross/components/game/mlb/year_2016/month_03/day_12/master_scoreboard.json'
msg.send(getData(url))
getData = (url) ->
robot.http(url)
.get() (err, res, body) ->
result = JSON.parse(body)
console.log(result.data.games.game[1].home_team_city)
team = result.data.games.game[1].home_team_city
当我运行上面的命令时,console.log语句打印“Boston”,但机器人打印“[Object Object]”如何让机器人打印“Boston”。注意:我打算为一堆其他响应重用getData函数。
感谢您的帮助。
答案 0 :(得分:0)
请求不返回结果,因为它是异步的。这意味着只有在服务器响应后才能使用结果。
它可能会返回一个Promise或类似的东西,或者某些东西来听取响应。
试试这个(我简化了一下作为coffeescript的介绍,我希望它仍然清晰):
url = 'http://mlb.mlb.com/gdcross/components/game/mlb/year_2016/month_03/day_12/master_scoreboard.json'
module.exports = (robot) ->
robot.hear /score/i, getData
getData = (msg) ->
robot
.http url
.get() (err, res, body) ->
team = JSON.parse(body).data.games.game[1].home_team_city
console.log team
msg.send team
答案 1 :(得分:0)
你只需要使用回调......就像这样:
module.exports = (robot) ->
robot.hear /score/i, (msg) ->
url = 'http://mlb.mlb.com/gdcross/components/game/mlb/year_2016/month_03/day_12/master_scoreboard.json'
getData url, (cb) ->
msg.send(cb)
getData = (url, successCallback) ->
robot.http(url)
.get() (err, res, body) ->
result = JSON.parse(body)
console.log(result.data.games.game[1].home_team_city)
team = result.data.games.game[1].home_team_city
successCallback(team)