Angular 4 链接 http get 请求(承诺)

Angular 4 chaining http get request(Promises)

我希望获得有关以下代码的一些帮助:

fillDataAssociationsArray(DataAssociationIDS: string[]) {
const promise = new Promise((resolve, reject) => {
  for (const id of DataAssociationIDS) {
    this.api.getDataAssociationByID(id).toPromise().then(
      data => {
        this.DataAssociations.push(data.body.entities.DATAASSOCIATIONS[0]);
      });
  }
  resolve();
});

return promise;}

在上面的代码中,我尝试将 DataAssociationIDS 数组转换为 DataAssociation 对象,然后将它们推送到本地 DataObjects[] 数组。我从数组(参数)中获取每个带有 id 的数据对象,而不是对 API 执行获取请求,其中 returns 来自后端的正确数据对象。

public getDataAssociationByID(dataAssociationID: string) {
return this.http.get<DataAssociationInterface>(this.apiURL + 'typeOne=DATAASSOCIATIONS&id=' + dataAssociationID,
 { observe: 'response' });}

我想链接一些来自我的 api 的 HTTP get 请求,其中每个请求都取决于前一个请求 的结果。所以我的想法是对这些请求做出承诺并使用 then() 方法如下: firstRequest().then( SecondRequest().then(...)) 等等。

我的尝试

ngOnInit() {
   this.fillDataAssociationsArray(this.extractDataAssociationIdsFromActivities()).then(
  () => console.log(this.DataAssociations)
  // () => console.log(this.DataAssociations[0].languages.DUT.name)
);}

First result Second line result

then() 块中的第一行打印了正确的结果本地数组,但是,当我尝试打印项目名称的第二行(注释)时,我得到了未定义的信息???当我链接下一个请求时,它显然也无法读取 undefined。

我认为您遇到了异步问题。

您可能在从 http get 调用获得结果之前解决了您的承诺。

我认为解决此问题的最佳方法是添加一个 api 调用以获取 ID 数组和 return 结果数组。但是对于这个用例,我的方法是:

fillDataAssociationsArray(DataAssociationIDS: string[]) {
const promise = new Promise((resolve, reject) => {
  for (const id of DataAssociationIDS) {
    this.api.getDataAssociationByID(id).toPromise().then(
      data => {
        this.DataAssociations.push(data.body.entities.DATAASSOCIATIONS[0]);
        if (this.DataAssociations.length === DataAssociationIDS.length) {
          resolve();
        }
      });
  }
});

return promise;}