Reputation: 32758
I want the done to print only after the first and second is printed.
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');
});
Upvotes: 0
Views: 79
Reputation: 96891
You don't complete any of the two source Observables so no operator can know what you consider as "done". This means you could use merge
or combineLatest
and only handle next
notifications.
However, if you know they'll always emit just once you can complete
each source and then use forkJoin
or concat
:
const obs1 = new Observable<any>((observer) => {
setTimeout(() => {
console.log('first');
observer.next();
observer.complete();
}, 10000);
});
...
concat(obs1, obs2).subscribe({
complete: () => {
console.log('done');
}
});
Upvotes: 1