首页 > 解决方案 > 如何将源发出的值与前一个值合并

问题描述

假设我有这些 Observables:

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]

标签: typescriptrxjs

解决方案


我不太确定您的要求,但我认为这就是您正在寻找的:

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 操作符,尤其是merge,mergeAllmergeMap. 见官方文档: http ://reactivex.io/rxjs/class/es6/Observable.js~Observable.html


推荐阅读