我想获得以下代码的一些帮助:
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的每个DataObject,然后对API执行get请求,该API从后端返回正确的DataObject。
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() - block中的第一行打印正确的结果本地数组但是,当我尝试第二行(注释)打印项目的名称时,我得到未定义的???当我链接下一个请求时,显然也无法读取undefined。
答案 0 :(得分:0)
我认为你这里有一个异步问题。
在您从http get call获得结果之前,您可能正在解决您的承诺。
我认为解决此问题的最佳方法是添加一个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;}
&#13;