RxJS接受运算符不与Angular应用一起使用

时间:2019-01-25 19:18:28

标签: angular rxjs

我有一个解析器,该解析器从服务中获取数据,并将该Observable对象传递给订阅并实现该解析器的组件。

resolve (route: ActivatedRouteSnapshot): Observable<NewsAPIArticle[]> {
    return this.newsAPIService.getNewsAPIArticles()
        .pipe(
            catchError(error => {
                this.alertify.error('Problem retrieving news');
                return of(null);
            }),
            take(5)
        );
}

在组件的ngOnInit中,获取数据,将其保存到本地数组,然后控制台记录该数组。

ngOnInit() {
    this.router.data.subscribe(data => {
      this.articles = data['news']['articles'];
      console.log(this.articles);
      this.language = 'en';
    });
  }

但是,按照我的理解,解析器不应从控制台记录5件事,而应从控制台观察5件事,而是返回20个对象。我在take rxjs运算符中做错了什么?我不希望所有的20条回复,也许只有5条。

enter image description here

2 个答案:

答案 0 :(得分:4)

take(5)表示它将从流中取出5个项目。数组是流中的单个项目,因为可观察的类型为NewsAPIArticle[]。如果observable的类型为NewsAPIArticle,并且该流发出了多篇文章,则take(5)的行为将与您期望的一样,但实际上,您调用的服务会一次发出所有文章。

答案 1 :(得分:2)

您应该将地图与切片一起使用

 .pipe(...
   map(x => x.slice(0,5))
 )