Rxjs 按顺序执行两个观察,并等待两者完成

Rxjs 按顺序执行两个观察,并等待两者完成,rxjs,Rxjs,我只想在第一个和第二个打印完成后再打印 const obs1 = new Observable<any>((observer) => { setTimeout(() => { console.log('first'); observer.next(); observer.complete(); }, 10000); }); const obs2 = new Observable<any>((observer) => {

我只想在第一个和第二个打印完成后再打印

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');
});

<>你没有完成两个源观测值,所以没有操作员知道你所做的事情。这意味着您可以使用merge或CombineTest,只处理下一个通知

但是,如果您知道它们总是只发出一次,则可以完成每个源,然后使用forkJoin或concat:


这里不维持秩序。首先显示第二个。更新问题,然后使用concat,但您只需在观察者中处理完整的通知。否则,您可以使用toArray收集来自两个源观测值的所有排放。
const obs1 = new Observable<any>((observer) => {
  setTimeout(() => {
    console.log('first');
    observer.next();
    observer.complete();
  }, 10000);
});

...

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