我正在尝试为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
而不是尝试捕获数组中的列表时,脚本会起作用,但我也想根据排名对列表进行排序。
答案 0 :(得分:1)
这里有几件事情。
首先,您不需要首先将listings
初始化为数组。
其次,我认为你正在寻找for player in listings
。
第三,我认为这是最重要的一点:
request
发送ajax请求。根据定义,Ajax请求是异步的。
所以你实际进入你的阵列是“请求”的结果:可能没什么。
我建议使用async.js这样的库,一个promise实现等,或者只是一个i = players.length
,你每次请求成功时都会减少并检查,以确保你的代码在它之前等待所有结果执行。