Следующее должно повторять вашу идею: 1 событие, выпущенное до завершения.
import { of } from 'rxjs';
import { expand, takeWhile, reduce } from 'rxjs/operators';
let count = 0;
const FINISH = "finished";
const limit = 5;
const send$ = () => of(count++ < limit ? "sent" : FINISH);
const expander$ = send$().pipe(
expand(resp => send$()),
takeWhile(resp => resp !== FINISH),
reduce((acc, val) => acc ? acc + val : val, null)
);
const subscribe = expander$.subscribe(console.log);
Вы можете видеть, как оно работает в этом блице