Javascript 接收来自多个角度观测值的数据
我有两种服务。这两个服务都有单独的主题,我通过返回Javascript 接收来自多个角度观测值的数据,javascript,node.js,angular,rxjs,Javascript,Node.js,Angular,Rxjs,我有两种服务。这两个服务都有单独的主题,我通过返回asObservable将这两个主题暴露给其他组件。两者都有一个addDataN函数,并且都通过on subject向服务中的受试者发送数据,因此getdataN方法也发送有关受试者的数据 现在在消费者方面,我接受两项完全独立的服务。在组件中,我订阅了侦听器,它返回asObservable,和getdataN函数,它们发出数据 服务1 我的问题是一开始的zip。两个服务在开始时都可以正常工作,因为两个服务都会发出数据,但在将数据发送到serv1之
asObservable
将这两个主题暴露给其他组件。两者都有一个addDataN
函数,并且都通过on subject向服务中的受试者发送数据,因此getdataN
方法也发送有关受试者的数据
现在在消费者方面,我接受两项完全独立的服务。在组件中,我订阅了侦听器,它返回asObservable
,和getdataN
函数,它们发出数据
服务1
我的问题是一开始的zip。两个服务在开始时都可以正常工作,因为两个服务都会发出数据,但在将数据发送到serv1
之后,另一个服务不会发出任何数据,因此它会卡在那里
在withLatestFrom
中,仅接收最近的数据,我希望避免使用spread运算符
我有什么办法可以干净利落地实现这一点吗
非常感谢您的帮助。这是否回答了您的问题@如果观测值为complete@akash我希望避免在现有数据中添加唯一最新的数据。还有其他方法吗?之后两者都独立工作-请展示组件实现。@MichaelD我已经编辑了Ngoninit的基本大纲,这是否回答了您的问题@如果观测值为complete@akash我希望避免在现有数据中添加唯一最新的数据。还有其他方法吗?在那之后,两者都独立工作-请展示组件实现。@MichaelD我已经编辑了ngOnInit的基本大纲
getdata1() {
this.http.get<{message:string,Data1:any}>('http://localhost:3000/api/1')
.pipe(map((data1)=>{
return Data1.Data1.map(data=>{
return {
id: data._id,
data1Title:data1.data1Title,
}
})
})).subscribe((data1) => {
this.data1=data1
this.serv1Subject.next([...this.data1])
})
}
addData1(){
this.http.post<{message:string,Data1:any}>('http://localhost:3000/api/1',dataObject)
.subscribe((data)=>{
this.data1=data1
this.serv1Subject.next([...this.data1])
})
}
getData1Listener() {
return this.serv1Subject.asObservable()
}
getdata1() {
this.http.get<{message:string,Data2:any}>('http://localhost:3000/api/2')
.pipe(map((data1)=>{
return Data2.Data2.map(data=>{
return {
id: data._id,
data1Title:data1.data1Title,
}
})
})).subscribe((data1) => {
this.data1=data1
this.serv2Subject.next([...this.data1])
})
}
addData2(){
this.http.post<{message:string,Data2:any}>('http://localhost:3000/api/2',dataObject)
.subscribe((data)=>{
this.data1=data1
this.serv2Subject.next([...this.data1])
})
}
getData2Listener() {
return this.serv2Subject.asObservable()
}
ngOnInit(){
this.serv1.getdata1()
this.serv2.getdata2()
combineLatest(this.serv1.getData1Listener(), this.serv2.getData2Listener())
.subscribe(([data1,data2])=>{function x(){
something with data1,data2
}})
}