Проблема: посмотрите на мои 3 console.log
и изображение на выходе.Затем оператор tap
не регистрирует каждую запись, потому что вывод предыдущей операции: mergeMap(getDataByUrl)
вывод выглядит как Observable<entry[]>
.Я думаю, что это могло бы работать, если бы каждая запись была наблюдаемой, как: Observable<Observable<entry>[]>
.Я добавил оператор tap
, где я делаю ожидаемое преобразование;тем не менее, он не работает по подписке, и мне было интересно, есть ли лучшие операторы.
Вопрос: Есть ли подходящий оператор для сопоставления / сокращения внутренних записей, возвращаемых этой mergeMap?Или как мне заставить мой subscribe
вывести правильный вывод?
this.router$ = this.router.events.pipe(
find(nextRoute),
pluck('url'),
mergeMap(getDataByUrl),
tap(i => {
console.log(i); // Wrong output (app.component.ts:52)
const output = i.map(i => i[ 'data' ])
.reduce((acc, val) => {
acc[ val.id ] = val;
return acc;
}, {});
console.log(output); // Proper output (app.component.ts:58)
return output;
}),
);
this.router$.subscribe(console.log); // Wrong output (Subscriber.js:196)
ВЫХОД: