【发布时间】:2018-11-23 10:44:03
【问题描述】:
我现在有这段代码可以过滤一个 observable。
listings$: Observable<Listing[]>;
this.listings$ = this.firestore
.getListings()
.pipe(map(listings => listings.filter(listing => listing.promoted === true)));
效果很好,但我想充分利用 rxjs 而不是在数组上使用filter。
this.firestore.getListings() 函数返回Observable<Listing[]>,this.listings$ 也必须是Observable<Listing[]>。
我尝试了不同的方法,并为此苦苦挣扎了一段时间。也许你可以帮助我。我对 Angular 和 rxjs 仍然“新鲜”。
this.listings$ = this.firestore.getListings().pipe(
mergeMap(listings => listings),
filter(listing => listing.promoted === true)
);
类型
Observable<Listing>不可分配给类型Observable<Listing[]>。
我可能对 mergeMap 运算符做错了,甚至在这种情况下使用的运算符也不正确。
我尝试从this 帖子中调整代码。 flatMap 运算符似乎更改为 mergeMap。但是还是不行。
【问题讨论】:
-
使用 rxjs 映射和数组过滤器绝对是正确的做法。不要特意去改变它。
-
看起来错误是由给
this.listings$的类型引起的。在显示的代码之外,您必须调整代码以匹配单个列表对象的可观察流。我猜那个表格更方便你查看? -
@eric99 我没有在帖子中添加这部分代码。但它是
listings$: Observable<Listing[]>; -
感谢您提供的信息。那么,您究竟为什么要尝试使 observable 变平呢?