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;}
我希望获得有关以下代码的一些帮助:
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;}