等待 observable 的值(作为列表)使用列表中的每个成员调用另一个 observable?
Wait for an observable's value (as a list) to call another observable using each member from the list?
我正在为我的应用程序使用 3 个端点,其中 1 个端点依赖于其他端点的响应,这是一个列表,然后我需要使用列表中的每一项才能使用另一个端点,让我们将它们称为 epA
、epB
和 epC
、epA
returns 一个列表,然后我在 epB
上使用此列表,例如 [=16] =] 并且我正在尝试将 epB
和 epC
合并到一个组合列表中,因为它们共享相似的字段。
我的问题是,我对使用 angular 和 observables 太陌生了,我不知道是否有办法将这些 epB 和 epC 结果结合起来(目前没有提及,我订阅了 observables并将其值分配给我需要的其他对象)...如果有人可以帮助我,将不胜感激。抱歉,如果这太乱了,我在这里发帖和编码的经验很少angular。
这是我目前拥有的一些代码...它有点难看,但可以完成工作
代码
this._serverRequests.epA(this._Token).subscribe(x => {
this.servers = x;
x.forEach(server =>
this._serverRequests.epB(server)
.subscribe(info => {
this.serverInfo = info;
this.GridModel.data = info['States'];
this.GridModel.data.forEach(se => {
se.Start = this.formatValuesPipe.transform(se.Start, 'grid');
});
this.GridModel.data.map( o => {
o.ServerUrl = server;
});
})
);
},
error => this.errMsg = <any>error
);
this._serverRequests.epC(this._Token).subscribe(lic => {
this.licensesList = lic;
this.licensesModel.data = this.licensesList.LicenseUsageList;
this.licensesModel.data.forEach(li => {
li.AcquisitionTime = this.formatValuesPipe.transform(li.AcquisitionTime, 'grid');
});
});
我也试过forkjoin,但是因为epAreturns是一个列表,不知道怎么调用forkjoin里面的每一项
您可以将第一次调用的响应映射到调用数组,然后使用 combineLatest 给出所有响应的数组。
this._serverRequests.epA(this._Token).pipe
map(server => this._serverRequests.epB(server)),
).subscribe(requests => {
combineLatest(requests).subscribe(results => {
// You have an array of the multiple results here
})
});
我正在为我的应用程序使用 3 个端点,其中 1 个端点依赖于其他端点的响应,这是一个列表,然后我需要使用列表中的每一项才能使用另一个端点,让我们将它们称为 epA
、epB
和 epC
、epA
returns 一个列表,然后我在 epB
上使用此列表,例如 [=16] =] 并且我正在尝试将 epB
和 epC
合并到一个组合列表中,因为它们共享相似的字段。
我的问题是,我对使用 angular 和 observables 太陌生了,我不知道是否有办法将这些 epB 和 epC 结果结合起来(目前没有提及,我订阅了 observables并将其值分配给我需要的其他对象)...如果有人可以帮助我,将不胜感激。抱歉,如果这太乱了,我在这里发帖和编码的经验很少angular。
这是我目前拥有的一些代码...它有点难看,但可以完成工作
代码
this._serverRequests.epA(this._Token).subscribe(x => {
this.servers = x;
x.forEach(server =>
this._serverRequests.epB(server)
.subscribe(info => {
this.serverInfo = info;
this.GridModel.data = info['States'];
this.GridModel.data.forEach(se => {
se.Start = this.formatValuesPipe.transform(se.Start, 'grid');
});
this.GridModel.data.map( o => {
o.ServerUrl = server;
});
})
);
},
error => this.errMsg = <any>error
);
this._serverRequests.epC(this._Token).subscribe(lic => {
this.licensesList = lic;
this.licensesModel.data = this.licensesList.LicenseUsageList;
this.licensesModel.data.forEach(li => {
li.AcquisitionTime = this.formatValuesPipe.transform(li.AcquisitionTime, 'grid');
});
});
我也试过forkjoin,但是因为epAreturns是一个列表,不知道怎么调用forkjoin里面的每一项
您可以将第一次调用的响应映射到调用数组,然后使用 combineLatest 给出所有响应的数组。
this._serverRequests.epA(this._Token).pipe
map(server => this._serverRequests.epB(server)),
).subscribe(requests => {
combineLatest(requests).subscribe(results => {
// You have an array of the multiple results here
})
});