我希望仅在打印完第一和第二个之后打印完成。
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');
});
答案 0 :(得分:1)
您没有完成两个源Observable中的任何一个,因此没有操作员可以知道您认为“完成”的内容。这意味着您可以使用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');
}
});