0

我有这个类,我尝试用查询结果初始化数组属性:

class data
minute: []
hour:   []
constructor:    () ->
    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)
    findMin.execFind (errMin, resMin) ->
        for recMin in resMin
            @minute.push recMin
    findHour.execFind (errH, resH) ->
        for recH in resH
            @hour.push recH

所以我调用smth = new data()console.log smth得到一个空属性和一个关于未定义没有“推送”方法的错误。虽然我能理解一个错误,但我不明白为什么我的数组是空的。不要误会我的意思——我知道这个错误会导致它们为空,但我尝试了几种变体。我阅读了有关 acync 和回调的信息,但仍然不知道如何使用回调而不是“警报”,而是在之后使用它。如果您可以帮助我或提供一些链接,我将非常感激。

4

2 回答 2

0

我假设您想要minutehour成为实例变量?它们必须在构造函数中初始化。你现在这样做的方式,他们在 上prototype,所以它不能正常工作。尝试这个:

class data
  constructor:    () ->
    @minute = []
    @hour = []
    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)
    findMin.execFind (errMin, resMin) =>
        for recMin in resMin
            @minute.push recMin
    findHour.execFind (errH, resH) =>
        for recH in resH
            @hour.push recH
于 2012-09-18T20:47:03.250 回答
0

你有两个问题。导致您观察到的错误的原因是两个回调中的“@”未绑定到您的data实例,因此您需要使用=>. 其次,正如@AaronDufour 所指出的,您的hourminute数组是在类级别声明的,因此它们将在 的每个实例之间共享data,我怀疑这是您想要的,因此您需要将它们移动到您的构造函数中。

class data
  constructor: () ->
    @minute = []
    @hour = []

    findMin = events.find({"aggr":"minute"}).sort({$natural:-1}).limit(120)
    findHour = events.find({"aggr":"hour"}).sort({$natural:-1}).limit(14)

    findMin.execFind (errMin, resMin) =>
      for recMin in resMin
        @minute.push recMin
    findHour.execFind (errH, resH) =>
      for recH in resH
        @hour.push recH
于 2012-09-18T21:45:18.473 回答