我正在处理一个Angular7项目,该项目显示来自旧的缓慢后端的多个端点的信息。
我想处理和显示每个端点到达时的信息。这样,用户不必等待最慢的端点,并且处理负载保持分散。
最慢的端点最终返回时,应集中处理合并的集合。
不能保证到达的顺序。
-我有这两个数据源“矩形”和“正方形”。
-计算每个项目的面积是一项繁重的工作。
-数据完整到达,而不是逐项到达。
-我想在最后一个集合到达时对整个集合进行排序。
Rectangles: [ {x:1 , y:3} , {x:3,y:2} ] 30 seconds to get this
Squares : [ { side:10 } , { side: 2} ] 2 minutes to get this
Desired output:
Displayed at 30 seconds: Rect-Area-3 , Rect-Area-6
Displayed at 2 minutes: Rect-Area-3 , Square-Area-4 , Rect-Area-6 , Square-Area-100
现在,我对每个数据源都有这样的代码。每个来源的数据都有一个完全不同的json结构,它们几乎没有共同点。
public getDemographicData(){
const myObserver = {
next: serverData => {
//
//Process result , save.
//Let another component handle data presentation when
//change detection occurs
},
error: err => console.error('Observer got an error: ' + JSON.stringify(err)),
complete: () => {}
};
// getDemographicsData returns an observable using http.get
this.dataService.getDemographicsData(surveyId).subscribe(myObserver);
}
我不认为forkjoin是我想要的,因为一个可以从多个可观察对象中获得一个可观察对象。我不想等待所有数据输入后再处理它。
任何帮助或评论都值得赞赏,我在其他地方找不到满意或可以理解的答案。我只是在不得已的情况下在帮助网站上发帖。
答案 0 :(得分:2)
您确实想要forkJoin。
在每个流的VirtualMachine
中处理各个流的数据,并在forkJoin中触发组合计算,然后同时订阅两者。
tap
let fastObs = of('Fast').pipe(delay(1000), tap(console.log)); // One of the faster http requests, console.log will trigger after 1 second
let slowObs = of('Slow').pipe(delay(10000), tap(console.log)); // Slower, triggers after 10 seconds