2017-03-22 64 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

噢,错字......它并没有解决什么,但感谢指出了这一点。 –