Search code examples
javascriptangularrxjsobservableangularfire2

RxJS filtering over multiple streams


Actually I stuck in this problem.

I have a stream for events using Angularfire2.

this.events$ = this.af.database.list('/events')
    .map(events => {
    const filtered = events.filter(event => event.title === "Title 1");
    return filtered;
    });

which retrieves me data like this:

{
  title: "Title 1",
  userid: "1"  
}

Then I have a second stream for the user like this:

this.users$ = this.af.database.list('/users/1')
    .map(users => {
    const filtered = users.filter(user => user.name === "Name 1");
        return filtered;
    });

Now I want to combine the streams to get the following result:

Return me all the events where event.title === "Title 1" and user.name === "Name 1"

How is this possible?

Thanks in advance!


Solution

  • This answer is outdated! Unfortunately, I can't delete it.

    Something like this works for me:

    this.events$ = this.af.database.list('/events')
          .map(events => {
            events.map(event => {
                this.af.database.object('users/' + event.userid)
    
                .subscribe(user => {
                    event.user = user;
                  })
                })
                 
                const filtered = events.filter(event => event.title === "Test 1")
                    .filter(event => event.user.name === "Name 1");;
                    return filtered;
            });
    

    I'm subscribing to the users inside my Event observable. After that I save the user to a property of my event.

    Work's fine for me!

    Notice: If you want to get real time updates of your user, save the observable to the property and not the user object. <then subscribe to it later in the view.