Выполнение двух наблюдаемых последовательно и ожидание завершения обоих - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу, чтобы готовый печатался только после печати первого и второго.

const obs1 = new Observable<any>((observer) => {
  setTimeout(() => {
    console.log('first');
    observer.next();
    observer.complete();
  }, 10000);
});

const obs2 = new Observable<any>((observer) => {
  setTimeout(() => {
    console.log('second');
    observer.next();
    observer.complete();
  }, 1000);
});

from([obs1, obs2]).pipe(concatAll()).subscribe(() => {
  console.log('done');
});

1 Ответ

0 голосов
/ 07 февраля 2019

Вы не завершили ни одну из двух исходных наблюдаемых, поэтому ни один оператор не может знать, что вы считаете «выполненным».Это означает, что вы можете использовать merge или combineLatest и обрабатывать только next уведомления.

Однако, если вы знаете, что они всегда будут излучать только один раз, вы сможете complete каждый источник и затем использовать forkJoin или concat:

const obs1 = new Observable<any>((observer) => {
  setTimeout(() => {
    console.log('first');
    observer.next();
    observer.complete();
  }, 10000);
});

...

concat(obs1, obs2).subscribe({
  complete: () => {
    console.log('done');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...