2017-03-22 52 views
0

我在TypeScript中使用Angular 2並嘗試使用Facebook SDK包裝器。Angular 2 api call promise array not resolve

我需要在循環中解析Facebook數據。不知何故,我的承諾數組不解決。但是當我記錄api調用的響應時,一切似乎都很好。 所以我在Promise處理方面做了錯誤的事情。

無極功能:

getOrgData(): Promise<any> { // I ONLY NEED TO STORE THE ORGANISATION IDS, DONT NEED FB API FOR THAT ... ??? I DO NEED THE CATEGORIES, PLACE_TOPICS, EMAILS, ... 
    let promiseArray: Array<any> = [] 
    for (var o in this.per50) { 
    promiseArray.push(new Promise((resolve,reject) => 
     this._facebookService.api('/?ids=' + this.per50[o] + '&fields=id,name,category,category_list,place_topics,place_type,emails,phone,location&access_token='+ this.access_token) 
     .then(
     (resp) => { 
      console.log(resp); 
      resolve(true) 
     }, 
     (error) => this.errorMessage = error 
    ) 
    )); 
    } 

    return Promise.all(promiseArray); 
} 

我打電話這樣說:

this.getOrgData().then(
    resp => console.log(resp), 
    error => console.log(error), 
) 

for循環的原因是,Facebook的API調用只能同時處理50個項目所以我必須創建一個包含最多50個項目的數組的對象。

所以foreach數組50我正在做一個Facebook調用。所有的工作正常......只是Promise數組似乎沒有得到解決。任何人有想法?

我不是真的經歷了承諾,我寧願觀測量,但這個Facebook的SDK封裝可與承諾如此...

--------------- ------------已解決----------------------------

顯然,承諾是工作正常,但我沒有捕獲Facebook的API調用的錯誤,所以我從來沒有在Facebook電話的then()所以沒有解決正在發生,我的壞。

回答

0

使用let代替varfor循環

for (let o in this.per50) { 
    promiseArray.push(new Promise((resolve,reject) => 
     this._facebookService.api('/?ids=' + this.per50[o] + '&fields=id,name,category,category_list,place_topics,place_type,emails,phone,location&access_token='+ this.access_token) 
     .then(
     (resp) => { 
      console.log(resp); 
      resolve(true) 
     }, 
     (error) => this.errorMessage = error 
    ) 
    )); 
    } 
+0

噢,錯字......它並沒有解決什麼,但感謝指出了這一點。 –