如何解决从Angular中的多个可观察对象接收数据
我有2个服务。两种服务都有各自的主题,我通过返回asObservable
将它们都暴露给其他组件。两者都具有addDataN
功能,并且都通过按主题发送数据以尊重服务中的主题,因此getdataN
方法也按主题发送数据。
现在,在消费者方面,我正在接受两项完全独立的服务。在组件I中,我订阅了监听器,它们返回了asObservable
和getdataN
函数,它们正在发出数据
Serv1
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()
}
Serv2
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,}
})
})).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
的使用者组件上,我要确保两个主体都发出数据并对从两端接收到的数据执行功能x
。然后两者都可以独立工作。
ngOnInit(){
this.serv1.getdata1()
this.serv2.getdata2()
combineLatest(this.serv1.getData1Listener(),this.serv2.getData2Listener())
.subscribe(([data1,data2])=>{function x(){
something with data1,data2
}})
}
我的问题开头是zip。两者在开始时都可以正常工作,因为两种服务都可以发出,但是在向serv1
发出数据之后,另一种没有发出任何东西,因此卡在那里。
在withLatestFrom
中,仅接收到最近的数据,我想避免使用传播算子
有什么办法可以干净地实现它吗?
感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。