我有这个类,我尝试用查询结果初始化数组属性:
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
并得到一个空属性和一个关于undefined没有'push'方法的错误。虽然我可以理解一个错误,但我无法理解为什么我的数组是空的。别误会我的意思 - 我知道这个错误导致它们是空的,但我尝试了几种变种。并且我已经阅读了关于acync和回调的信息,但仍然不知道如何使用回调来“警告”smth,而是在之后使用它。如果你可以帮助我或使用一些可能的链接 - 我会非常感激。
答案 0 :(得分:0)
我假设您希望minute
和hour
成为实例变量?它们必须在构造函数中初始化。你现在这样做的方式是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
答案 1 :(得分:0)
你有两个问题。导致您观察到的错误的是您的两个回调中的'@'未绑定到您的data
实例,因此您需要使用=>
。其次,正如@AaronDufour所指出的,你的hour
和minute
数组在类级别声明,因此它们将在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