被Coffeescript困惑

时间:2016-03-13 06:40:27

标签: coffeescript hubot

我是一个完整的新手,如果这是一个愚蠢的问题,那就很抱歉。

我正在写一个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函数。

感谢您的帮助。

2 个答案:

答案 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)