Я недавно изучил Angular и пытаюсь лучше понять Rx JS. Предположим, у меня есть ответ API от HttpClient.get, который дает мне Observable следующего JS объекта:
const response = {
photos: [
{
id: 1,
src: '1.jpg',
},
{
id: 2,
src: '2.jpg',
},
{
id: 3,
src: '3.jpg',
}
]
}
Конечный результат, который я ищу: ['1.jpg', '2.jpg', '3.jpg']
Я могу сделать следующее, чтобы получить каждого отдельного человека c по одному:
const source = from(response.photos);
const images = source.pipe(
pluck('src')
);
images.subscribe({
next(x) {
console.log(x); // results in: 1.jpg 2.jpg 3.jpg, one item per line.
}
});
Но то, что я хотел бы сделать, и что я думал, будет работать, это создать можно наблюдать за полным ответом (как это было бы дано из вызова Angular в http.get ()) и возвращать все свойства sr c в виде массива, например:
const source = of(response);
const images = source.pipe(
pluck('photos'), // i expect this to be [{ id: 1, src: '1.jpg' }, ... ]
map(x => x.src), // i expect x to to be { id: 1, src: '1.jpg' } (but it is not)
);
images.subscribe({
next(x) {
console.log(x); // i expect x to be the result of the map call earlier, i.e. ['1.jpg', '2.jpg', '3.jpg']
}
});
Полагаю, Вероятно, я зациклился на ожидании окончательного значения в сравнении со значениями по мере их поступления или чего-то в этом роде. Если кто-то может помочь объяснить, как получить желаемый результат или предложить другой / лучший подход, я надеюсь, что что-то щелкнет, и вещи начнут приобретать больше смысла.