Javascript 对变量求和完成后,将项推送到数组
使用Angular,我创建了一个组件,该组件触发初始web请求以及循环中使用的两个其他组件。我正在循环这些项目以设置Javascript 对变量求和完成后,将项推送到数组,javascript,angular,http,Javascript,Angular,Http,使用Angular,我创建了一个组件,该组件触发初始web请求以及循环中使用的两个其他组件。我正在循环这些项目以设置sitecont,这是在第一个循环的请求中声明的。我正在使用setTimeout()将总金额推送到一个数组中,但这可能不是最佳做法 constructor(public http: HttpClient, public chart: ChartDetails) { this.http.get(`https://siteurl.com/items?$filter=Hub
sitecont
,这是在第一个循环的请求中声明的。我正在使用setTimeout()
将总金额推送到一个数组中,但这可能不是最佳做法
constructor(public http: HttpClient, public chart: ChartDetails) {
this.http.get(`https://siteurl.com/items?$filter=Hub/Title eq 'Project Hub' and Active eq 'Yes'`).subscribe(data => {
data['value'].forEach(item => {
let siteCount: number = 0
this.http.get(`${item.Site}/lists/?$filter=BaseTemplate eq 171`).subscribe(data => {
data['value'].forEach(list => {
this.http.get(`${item.Site}/lists(guid'${list.Id}')/items`).subscribe(data => {
this.myTasks = data['value']
this.myTasks.forEach(variable => {
variable.internalListName = list.EntityTypeName.replace("List", "")
});
siteCount += data['value'].length
})
});
})
setTimeout(() => {
if (siteCount) {
this.chart.goalChartLabels.push(item.Title)
this.chart.goalChartData.push(siteCount)
}
}, 500);
});
})
}
如果不使用
setTimeout
,当sitecont
完成时,在下一个项目重置为0之前,如何推送项目。Title
和sitecont
从'rxjs'导入{zip};
...
这是http.get(`https://siteurl.com/items?$filter=activeeq'Yes'`。订阅(数据=>{
数据['value'].forEach(项=>{
this.http.get(`${item.Site}/lists/?$filter=BaseTemplate eq 171`)。订阅(数据=>{
const itemListObservables=数据['value']
.map(list=>this.http.get(`${item.Site}/lists(guid'${list.Id}')/items`);
zip(…itemListObservables)
.订阅(项目列表=>{
const totalCount=itemLists
.map(l=>l.length)
.减少((总和,值)=>总和+值,0)
如果(总计数>0){
this.chart.goalChartLabels.push(item.Title)
this.chart.goalChartData.push(totalCount)
}
itemLists.forEach(变量=>{
variable.internalListName=list.EntityTypeName.replace(“list”,“”);
this.myTasks.push(变量);
});
});
})
});
})
zip
函数等待所有观察值发出一个值并返回它们的数组
关于最佳做法:
您应该使用
forkJoin()
发出所有请求,然后获得响应
使用承诺和
Promise.all()
在解决所有承诺时执行操作。@Barmar或OP可以使用forkJoin
,如果他们想继续使用observeable
s