У меня сложилось впечатление, что combineLast
вначале подходил, но когда я читаю документы, кажется, что это не так: «Имейте в виду, что combineLatest
не будет выдавать начальное значение, пока каждое наблюдаемое не выдаст по крайней мере одно значение ».… И, конечно, я попал именно в это исключение. Я пробовал forkJoin
и merge
в различных комбинациях, но я не могу понять это правильно.
Вариант использования довольно прост, метод someObs
возвращает 0
или более наблюдаемых, по которым я зацикливаюсь. Основываясь на значении объекта SomeObs
, я помещаю вновь созданную наблюдаемую OtherObs[]
в Array
из Observable<OtherObs[]>
. Этот массив «нужно» объединить в одну наблюдаемую, и прежде чем возвращать его, я бы хотел сделать несколько преобразований.
В частности, мне трудно заменить оператор combineLast
на что-то более подходящее ...
public obs(start: string, end: string): Observable<Array<OtherObs>> {
return this.someObs().pipe(
mergeMap((someObs: SomeObs[]) => {
let othObs: Array<Observable<OtherObs[]>> = [];
someObs.forEach((sobs: SomeObs) => {
othObs.push(this.yetAnotherObs(sobs));
});
return combineLatest<Event[]>(othObs).pipe(
map(arr => arr.reduce((acc, cur) => acc.concat(cur)))
);
})
);
}
private yetAnotherObs(): Observable<OtherObs[]> {
/// ...
}
private somObs(): Observable<SomeObs[]> {
/// ...
}