【问题标题】:Want to indefinitely Observe an Array that changes over time想要无限期地观察一个随时间变化的数组
【发布时间】:2017-02-06 22:01:50
【问题描述】:

我正在尝试使用 Rxjs Observables 来观察我的数组中的变化,但没有运气。

进口:

import {Observable} from 'rxjs/Observable';
import 'rxjs/add/observable/of';

在 Angular 2 的主要服务中

我从 socket.io 服务器获取了一个数组,当用户连接或断开连接时该数组会发生变化。 我在每次更改后设置数据。

我知道当套接字发射时 userList 正在更新,但由于某种原因,我无法弄清楚如何在我的组件中持续观察这种变化。

主要服务:

socket.on('get users',(data)=>{
        this.userList= data;
      });

主服务中的函数 - getUsers():

  getUsers(){
        return Observable.of(this.userList);
      }

我正在尝试订阅 userList var,并使用异步管道,但都没有更新,它们只在第一次工作然后停止。 如何让它真正无限期地观察变化?

【问题讨论】:

    标签: sockets angular rxjs observable


    【解决方案1】:

    主服务

    userList: Subject = new Subject<any>();
    userList$ = this.userList.asObservable();
    
    socket.on('get users', (data: any) => {
       this.userList.next(data);
    });
    

    在组件中

    this.mainService.userList$
    .subscribe( 
       (data:any) => console.log(data)
    );
    

    【讨论】:

    • 这行得通,除了我遇到了一个问题。它最初没有在我的组件中获取第一包数据是否有原因?
    • 目前只在有新用户进来时才更新,但没有得到第一个数据流。
    • 是的,我尝试了一切,由于某种原因它不会订阅,直到另一个用户进来。知道如何获得第一个订阅吗?
    • AFAIK Subject 仅在调用 next 时发出。 reactivex subject docs - 尝试使用 BehaviourSubject also look at the rxjs subject docs on github
    猜你喜欢
    • 2020-12-19
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2011-07-03
    • 1970-01-01
    • 2017-11-16
    相关资源
    最近更新 更多