0

我正在尝试为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而不是尝试捕获数组中的列表时起作用,但是我也想根据排名对列表进行排序。

4

1 回答 1

1

这里有几件事。

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

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

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

所以你实际推入数组的是“请求”的结果:可能什么都没有。

我建议使用诸如 async.js 之类的库、promise implementation 等,或者只是在i = players.length每次请求成功时减少并检查一个库,以确保您的代码在执行之前等待所有结果。

于 2013-09-05T21:55:38.947 回答