【发布时间】:2020-05-01 21:11:34
【问题描述】:
我最近一直在学习 Angular,并试图更好地理解 RxJS。假设我有一个来自 HttpClient.get 的 API 响应,它为我提供了以下 JS 对象的 Observable:
const response = {
photos: [
{
id: 1,
src: '1.jpg',
},
{
id: 2,
src: '2.jpg',
},
{
id: 3,
src: '3.jpg',
}
]
}
我正在寻找的最终结果是:['1.jpg', '2.jpg', '3.jpg']
我可以执行以下操作来一次获取每个单独的 src:
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.
}
});
但我想做的,我认为可行的,是创建整个响应的 observable(因为它会从 Angular 的 http.get() 调用中给出)并将所有 src 属性作为数组,像这样:
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']
}
});
我想我可能会因为期望最终值与到达时的值或类似的东西而挂起电话。如果有人可以帮助解释如何获得所需的结果或提出不同/更好的方法,我希望有些事情会点击并且事情会开始变得更有意义。
【问题讨论】: