2012-09-18 54 views
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和回調函數,但仍然不知道如何使用回調函數不是爲了「提醒」smth,而是在之後使用回調函數。如果你能幫我解決這個問題,或者有一些可能的鏈接 - 我會很感激。

回答

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 
+0

Thx爲您的答案,但它沒有奏效。它引發了關於使用未定義推送的相同錯誤。在這些DB函數中,'@minute'和'@hour'似乎與THOSE函數相關,就像它們是本地的,而不是構造函數。 – Eshnelbek

+0

@Eshnelbek檢查我的更新代碼。你需要一個胖箭頭來保持正確的「@」。 –

+0

Thx很多,這有幫助! – Eshnelbek

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 
+0

Thx你們兩個,問題出在這個'胖箭頭' – Eshnelbek