Объединить две наблюдаемые от субъектов завершается слишком рано - PullRequest
1 голос
/ 06 апреля 2020

У меня есть две службы с одной Subject каждая, которая излучает void после завершения создания объектов. Я хочу объединить их, чтобы мой компонент получал информацию, когда одна из служб отправляет сообщение.

    let subject = new Subject();
    let subject2 = new Subject();

    let obs = subject.asObservable();
    let obs2 = subject2.asObservable();

    obs.subscribe(
      {
        complete: () => console.log('completed obs')
      }
    )

    obs2.subscribe(
      {
        complete: () => console.log('completed obs2')
      }
    )

    merge([obs, obs2]).subscribe(
      {
        next: () => console.log('thanks for info about creating the object I needed, I will cleanup now'),
        complete: () => console.log('completed MERGE')
      }
    )

Я получаю completed MERGE в консоли, а не completed obs или completed obs2. Даже не испуская ничего. Моя проблема в том, что это merge завершается слишком рано. Я хочу использовать эти потоки (obs и obs2) для времени жизни компонента.

1 Ответ

1 голос
/ 06 апреля 2020

Метод merge не принимает массив. Ну, это так, но это не то, что вы ожидаете. Когда вы даете массив, он будет использовать from для создания потока. Это выдаст значения obs и obs2 в качестве значения и, таким образом, в два раза вызовет next. Поскольку в массиве есть только два элемента, объединение также будет complete, потому что все испущено.

Измените на merge(obs, obs2), и вы хороши для go.

stackblitz

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