Angular 4链接http获取请求(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;}

在上面的代码中,我试图将DataAssociationID的数组转换为DataAssociation对象,然后将它们推送到DataObjects[]的本地数组。我从数组(参数)中获取每个带有id的DataObject,然后向API执行getRequest,后者从后端返回正确的DataObject。

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

我想从我的api链接一些HTTPGet请求,,其中每个请求都取决于前一个请求的结果。所以我的想法是对这些请求做出承诺,并使用then()方法如下:firstRequest().then(SecondRequest().then(…))依此类推。

我的尝试

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

第一个结果第二行结果

then()-块中的第一行打印正确的本地数组,但是,当我尝试打印未定义项名称的第二行(注释)时???当我链接下一个请求时,它显然也不能读取未定义。

我认为这里存在异步问题。

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

我认为解决这个问题的最好方法是添加一个api调用来获取一个id数组并返回一个结果数组。然而,对于这个用例,我的方法是:

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;}

最新更新