2013-09-30 53 views
0

我需要從他的日曆顯示的用戶的所有事件。我得到所有日曆的列表,然後遍歷每個日曆獲取事件並嘗試將它們存儲在一個數組中。推值陣列的NodeJS

app.get('/getEventsList/', function (req, res) { 
newArray = []; 
function Done(){ 
console.log(newArray); 
} 

function getEventsforOneCalendar(token,calid){ 
gcal(token).events.list(calid, function(err, eventsList) { 
      newArray.push(eventsList); 
      }); 
} 
function getEventsList(token) { 

    gcal(token).calendarList.list(function (err, calendarList) { 
     if (err) { 
    //handle error 
     } else { 
      calendars = calendarList.items; 
      forEach(calendars, function (item, index) { 
      getEventsforOneCalendar(token,item.id); 
     }, Done); 

     } 
    }); 
} 
getEventsList('xxxxxxxxxxxtoken'); 

});

問題是:該行 newArray.push(eventsList);

任何價值,甚至在靜這條線通過不走像 newArray.push(「測試」); 並且不會引發錯誤。如果我登錄它,我可以在控制檯中看到它,但它永遠不會被添加到數組中。

什麼可能是錯誤的?

+0

這取決於你的'newArray'範圍屬於哪裏,你何時調用它。由於'getEventsforOneCalendar'調用是異步的,它的輸出可能在您查找它的時間點不可用。請在此處添加更多代碼,以便我們可以確定您正在使用'newArray'顯示事件列表。 – Kamrul

+0

Kamrul-我添加了代碼,當用戶請求頁面時,它只是一個函數(getEventsList)。我絕對認爲這是一個範圍問題,但不確定如何解決它。謝謝! –

+0

如果newArray是本地的,則在第二行前添加'var'。 –

回答

1

我最簡單的方法可以是這樣的。這一切取決於你想如何展示它。

app.get('/getEventsList/', function (req, res) { 
var newArray = []; 
var total; 
function display() { 
    console.log(newArray); 
} 

function getEventsforOneCalendar(token,calid){ 
gcal(token).events.list(calid, function(err, eventsList) { 
       newArray.push(eventsList); 
       if (total == newArray.length) 
        display(); 
      }); 
} 
function getEventsList(token) { 

    gcal(token).calendarList.list(function (err, calendarList) { 
     if (err) { 
    //handle error 
     } else { 
      calendars = calendarList.items; 
      total = calendars.length 
      forEach(calendars, function (item, index) { 
       getEventsforOneCalendar(token,item.id); 
      }, Done); 

     } 
    }); 
} 
getEventsList('xxxxxxxxxxxtoken'); 

}); 
+0

謝謝Kamrul。但仍然是'newArray.push(eventsList);' 不能從這個範圍訪問newArray我不知道爲什麼當顯示函數被調用時,數組是空的 –

+0

我已經爲'app.get'回調的範圍在'newArray'之前添加了'var'。將定義'newArray',請再次檢查。 – Kamrul

+0

Kamrul,你是對的!非常感謝! –