循环中的函数

时间:2013-09-05 20:58:30

标签: coffeescript hubot

我正在尝试为hubot编写一个脚本来获取游戏的玩家统计信息,但是我在列表理解方面遇到了一些麻烦。

这是我的代码

listings = []
listings = 
  (for player in players
    request "http://pwa.wp3.pl/curvefever/?player=" + player , (err, res, body)->
      $ = cheerio.load(body)
      msg.send "Hello, world!1"
      {name: $('b').slice(0).eq(0).text().toLowerCase(), rank: parseInt($('td').slice(37).eq(0).text(),10)})

msg.send "Hello, world!2"
for player of listings
  msg.send "Hello, world!3"
  msg.send player.name + " " + player.rank

运行时,我得到“Hello,world!2”,然后是几个“Hello,world!1”,而不是“Hello,world!3”,因为列表(大概)是空的。

当我执行msg.send而不是尝试捕获数组中的列表时,脚本会起作用,但我也想根据排名对列表进行排序。

1 个答案:

答案 0 :(得分:1)

这里有几件事情。

首先,您不需要首先将listings初始化为数组。

其次,我认为你正在寻找for player in listings

第三,我认为这是最重要的一点: request发送ajax请求。根据定义,Ajax请求是异步的。

所以你实际进入你的阵列是“请求”的结果:可能没什么。

我建议使用async.js这样的库,一个promise实现等,或者只是一个i = players.length,你每次请求成功时都会减少并检查,以确保你的代码在它之前等待所有结果执行。