我有以下代码。它得到一个患者数组并构建一个行对象java
,我在这个角度4组件的frontEnd上的表中显示(我也使用rxjs 5.5)。
我的问题是每行的hasAlert属性是通过调用hasAlerts()来分配的。在HasAlerts方法中,我通过this.rows
为每位患者发出http请求。
当有很多患者时,太多的HTTP请求将异步发生,并且它们将从HasAlerts()开始失败(超时)。有没有办法限制它,或者从hasAlerts()一次处理一个Observable?
以下是解决此问题的可能方法
代码低于
this.dataService.fetchItems<Observation>(
答案 0 :(得分:2)
你可能想尝试这些方法。
const concurrency = 10;
const rowsWithAlerts = [];
this.patients$.debounceTime(2000)
.switchMap(patients => Observable.from(patients)) // patients is of type Patient[]
.mergeMap(patient => {
rowsWithAlerts.push(patient);
this.hasAlerts(patient).do(
hasAlertsResult => {
// here you have hold to both the patient and the result of
// hasAlerts call
patient.hasAlerts = hasAlertsResult;
}}), concurrency)
.subscribe(
() => this.rows = rowsWithAlerts;
)
这里的关键是使用mergeMap
运算符并将并发级别设置为一个值,在本例中为10但显然可以是任何值。
这允许限制您同时订阅的可观察数量,在您的情况下,这意味着限制您进行的http呼叫数量。