我有一个要调用的函数,在该函数中我使用了Promise,我也想先调用此函数(实际上是代码中调用的第二个函数),检索一些数据,然后解析该数据。第二个函数也可以检索一些数据。
getAllProductGroups(): Promise<void> {
return new Promise((resolve, reject) => {
this.allEngagementTypes().subscribe(data => {
const products = {};
const potentialEvents = [];
data.forEach(product => {
// products[product.id] = product.description;
this.potentialForEvents(this.organization.id, product.id)
.subscribe(potentialEventData => {
potentialEvents.push(potentialEventData);
this.allEngagementAreas().subscribe(areas => {
this.organization.addAreas(areas, potentialEvents);
resolve();
}, error => reject(error));
});
});
})
});
}
我在第一个函数调用 allEngagementTypes 上调用forEach,因为我需要使用每个元素然后在 potentialForEvents 上进行第二个函数调用,然后创建一个数组带有 potentialEvents.push ,
的响应然后我要使用该数组,在我的第三个调用“ allEngagementAreas ”之后对其进行解析,因为当此函数调用“ addAreas”函数时,我要解析该数组 potentialEvents ,但是由于forEach已发送21次,因此在“ addAreas”完全加载之前实际上仅发送了其中两个区域,因此我只需要发送一个数组并对其进行解析即可在 allEngagementAreas 。
非常感谢您的帮助。
答案 0 :(得分:0)
如果我正确理解了您的问题:
getAllProductGroups(): Promise<void> {
return new Promise((resolve, reject) => {
this.allEngagementTypes().subscribe(data => {
const products = {};
const potentialEvents = [];
data.forEach(product => {
// products[product.id] = product.description;
this.potentialForEvents(this.organization.id, product.id)
.subscribe(potentialEventData => {
potentialEvents.push(potentialEventData);
if(potentialEvents.length === someConstValue) { //not sure how, but you need to find out the needed array length
resolve(potentialEvents);
}
});
});
})
}).then(potentialEvents => {
this.allEngagementAreas().subscribe(areas => {
this.organization.addAreas(areas, potentialEvents);
}, error => reject(error));
})
}
主要思想是将其拆分为两个Promise,并在填充数组时解析第一个Promise。在forEach循环中,它们通常将结果长度与某个const值进行比较。