当我从一个超文本传输协议调用中收到一个数组时,我想我对RxJS是如何工作的有一个误解。
例如,我有:
public getNews(): Observable<News[]> {
return this.http.get<News[]>("/news");
}在我想要在上面使用一个简单的地图之后:
this.newsService.getNews().pipe(map(news => {
return {
// DO SOMETHING HERE WITH NEWS
};
}));问题是我的参数的类型,Typescript告诉我它是一个新闻数组,但它在地图中,所以通常它必须是新闻类型,对吧?
我不知道我是否清楚,但如果有人能解释我,那就太好了:)
发布于 2020-03-03 17:21:43
您好,要将数组转换为项目列表,您可以使用flatMap运算符;您可以使用map处理subscribe或trasform中的每个项目
this.service.getNews().pipe(
flatMap(x => x)
).subscribe(x => {
// do something for each item
});或
this.service.getNews().pipe(
flatMap(x => x),
map(x => {
// transform each item
})
);第二个仍然是一个可观察的
发布于 2020-03-03 16:42:22
嗯,rxjs管道中的map操作符是在异步数据流上操作的,换句话说,就是Observable。
所以在这里,你有一个Observable<News[]>,它意味着一个New[]流。这意味着你的this.newsService.getNews().pipe(map(news => {});的news是一个New数组。
发布于 2020-03-03 17:40:57
如果您想要转换管道()中的每个项目,您可以使用:
this.getNews()
.pipe(
switchMap(newsList => from(newsList)
.pipe(
map(news => {
// Do something with each item
console.log(news);
return news;
})
)
),
// Set back to array
reduce((curr: NewsData[], next: NewsData) => [...curr, next], []),
)
.subscribe(data => console.log(data));https://stackoverflow.com/questions/60503046
复制相似问题