Mongodb Can';无法获取函数外部的查询结果
我在这个类中尝试使用查询结果初始化数组属性:Mongodb Can';无法获取函数外部的查询结果,mongodb,coffeescript,mongoose,Mongodb,Coffeescript,Mongoose,我在这个类中尝试使用查询结果初始化数组属性: 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.execFin
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=newdata()
和console.log smth
,得到一个空属性和一个关于未定义没有“push”方法的错误。虽然我可以理解一个错误,但我无法理解为什么我的数组是空的。不要误解我的意思-我知道这个错误导致它们为空,但我尝试了几种变体。我读过acync和回调,但仍然不知道如何使用回调,不是为了“提醒”smth,而是在事后使用它。如果你能帮我做这件事或者提供一些链接,我会非常感激。我想你希望minute
和hour
成为实例变量?它们必须在构造函数中初始化。按照您现在的操作方式,它们位于原型上,因此无法正常工作。试试这个:
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
你有两个问题。导致您观察到的错误的原因是两个回调中的“@”未绑定到数据
实例,因此您需要使用=>
。其次,正如@AaronDufour所指出的,您的hour
和minute
数组是在类级别声明的,因此它们将在数据的每个实例之间共享,我怀疑这是您想要的,所以您需要将它们移动到构造函数中
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
谢谢你的回答,但没有用。它在使用undefined的push时抛出相同的错误。在这些DB函数中,“@minute”和“@hour”似乎与这些函数相关,就像它们是本地函数一样,而不是构造函数。@Eshnelbek检查我的更新代码。您需要一个胖箭头来保持正确的@
。Thx你们两个,问题在于这个“胖箭头”