我有一个解析器,该解析器从服务中获取数据,并将该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条。
答案 0 :(得分:4)
take(5)
表示它将从流中取出5个项目。数组是流中的单个项目,因为可观察的类型为NewsAPIArticle[]
。如果observable的类型为NewsAPIArticle
,并且该流发出了多篇文章,则take(5)
的行为将与您期望的一样,但实际上,您调用的服务会一次发出所有文章。
答案 1 :(得分:2)
您应该将地图与切片一起使用
.pipe(...
map(x => x.slice(0,5))
)