Как отобразить зависимые подписки в список объектов с данными, объединенными из каждой подписки? - PullRequest
0 голосов
/ 10 ноября 2019

Как мне отобразить зависимые подписки в список объектов, в которых данные, объединенные из каждой подписки, возвращают результат?

У меня есть Observable, содержащая массив объектов, который возвращается из APIзвоните, давайте называть их пользователями.

У меня есть вторая наблюдаемая, которая выбирает другой массив объектов и возвращает наблюдаемую коллекцию. Допустим, это имя с именем messages.

У меня есть необходимость получить токен авторизации через xhr, использовать токен auth для выборки пользователей, использовать идентификатор пользователя для выборки сообщений для каждого пользователя.

Желаемый результат этого будет выглядеть следующим образом:

const returnValue = [{ userId: 1, messages: [{...}]}];

У меня есть установка, которая выглядит следующим образом

users$.pipe(flatMap(user => { 
    this._userMessageService.getMessages$(user.id).subscribe(messages => {
    user.messages = messages;
    return user;
}))).subscribe((usersWithMessages) => console.log({usersWithMessages}));

Как я уверен, многиевы можете видеть, что это вернет пользователя с неопределенными сообщениями. Мой вопрос заключается в том, как обрабатывать несколько зависимых асинхронных вызовов, которые возвращают объекты пользователей с сообщениями, используя RXJS.

Спасибо за помощь!

1 Ответ

0 голосов
/ 10 ноября 2019

То, что вам нужно, называется комбинация в rxJs

Существуют различные стратегии реализации наблюдаемых комбинаций (как описано в приведенной выше ссылке)

примерa combineLatest, который имеет следующее описание: Когда какая-либо наблюдаемая излучает значение, испускает последнее излученное значение из каждого.

Я бы предложил вам изменить запрос сообщения на вызов, который может получить все пользовательские сообщения.

this.users$ = this.userService.getUsers(); // my guess
this.messages$ = this._userMessageService.getUserMessages$(); // 

combineLatest(this.users$, this.messages$).subscribe(
  ([users, messages]) => {

    console.log('users', users);
    console.log('messages', messages);

    //logic to set messages on the user objects goes here
  }
);

Надеюсь, это направит вас на правильный путь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...