依次执行两个可观察对象,并等待它们完成

时间:2019-02-07 12:53:20

标签: rxjs

我希望仅在打印完第一和第二个之后打印完成。

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 :(得分:1)

您没有完成两个源Observable中的任何一个,因此没有操作员可以知道您认为“完成”的内容。这意味着您可以使用mergecombineLatest并且仅处理next通知。

但是,如果您知道它们将始终只发射一次,则您可以complete每个信号源,然后使用forkJoinconcat

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

...

concat(obs1, obs2).subscribe({
  complete: () => {
    console.log('done');
  }
});