Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 接收来自多个角度观测值的数据_Javascript_Node.js_Angular_Rxjs - Fatal编程技术网

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
    }})
    }