【问题标题】:Function within a loop循环内的函数
【发布时间】:2013-09-09 20:24:33
【问题描述】:

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

【问题讨论】:

    标签: coffeescript hubot


    【解决方案1】:

    这里发生了一些事情。

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

    第二,我想你在找for player in listings

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

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

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

    【讨论】:

    • 谢谢,async.js 正是我想要的。 This 最终奏效了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2014-11-27
    相关资源
    最近更新 更多