首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带数组的RxJS运算符

带数组的RxJS运算符
EN

Stack Overflow用户
提问于 2020-03-03 16:32:36
回答 3查看 1.2K关注 0票数 2

当我从一个超文本传输协议调用中收到一个数组时,我想我对RxJS是如何工作的有一个误解。

例如,我有:

代码语言:javascript
运行
复制
  public getNews(): Observable<News[]> {
    return this.http.get<News[]>("/news");
  }

在我想要在上面使用一个简单的地图之后:

代码语言:javascript
运行
复制
this.newsService.getNews().pipe(map(news => {
    return {
      // DO SOMETHING HERE WITH NEWS
    };
}));

问题是我的参数的类型,Typescript告诉我它是一个新闻数组,但它在地图中,所以通常它必须是新闻类型,对吧?

我不知道我是否清楚,但如果有人能解释我,那就太好了:)

See screenshot here

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-03 17:21:43

您好,要将数组转换为项目列表,您可以使用flatMap运算符;您可以使用map处理subscribe或trasform中的每个项目

代码语言:javascript
运行
复制
this.service.getNews().pipe(
    flatMap(x => x)
).subscribe(x => {
    // do something for each item
});

代码语言:javascript
运行
复制
this.service.getNews().pipe(
    flatMap(x => x),
    map(x => {
    // transform each item
    })
);

第二个仍然是一个可观察的

票数 3
EN

Stack Overflow用户

发布于 2020-03-03 16:42:22

嗯,rxjs管道中的map操作符是在异步数据流上操作的,换句话说,就是Observable

所以在这里,你有一个Observable<News[]>,它意味着一个New[]流。这意味着你的this.newsService.getNews().pipe(map(news => {});news是一个New数组。

票数 0
EN

Stack Overflow用户

发布于 2020-03-03 17:40:57

如果您想要转换管道()中的每个项目,您可以使用:

代码语言:javascript
运行
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60503046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档