如何将源发出的值与先前的值合并

时间:2018-07-17 17:41:36

标签: typescript rxjs

假设我有这些可观察对象:

let users: Observable<User[]> //all the users

let receivedUsers: Observable<User[]> //only a subset of users get from http

users发出时如何使receivedUsers发出合并数组:

receivedUsers: [1]  .... [2]    ..... [3,4]       ..... [5,6]

users        : [1]  .... [1,2]  ..... [1,2,3,4]   ..... [1,2,3,4,5,6]

1 个答案:

答案 0 :(得分:1)

我不太确定您的要求,但是我认为这是您想要的:

export class Service {
  private users: User[] = [];
  private usersSubject: BehaviourSubject<User[]> = new BehaviourSubject();

  constructor(){
    // whereever it comes from
    // also consider a Set<User> if you want to avoid duplicates
    usersReceived.subscribe(users => {
     this.users = [...this.users, users];
     // this.users = this.users.push(users);
     this.usersSubject.next(this.users);
    });
  }

  public getAllUsers: Observable<User[]> {
    return this.usersSubject.asObservable();
  }
}

如果这不能满足您的需求,那么通常应该看一下rxjs运算符,尤其是mergemergeAllmergeMap。 请参阅官方文档: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html