我正在尝试从可观察对象数组中返回可观察对象的过滤版本。我有两个服务,一个服务从服务器获取菜肴并返回可观察的菜肴数组,另一个服务利用该服务并获取已被标记为收藏的菜肴,该服务还应返回一个数组或可观察的菜肴。
起初,我能够通过使用常规数组来检索预期的结果。请参见下面的工作代码:
最喜欢的服务
:favorites: Array<any>;
getFavorites(): Observable<Dish[]> {
return this.dishservice.getDishes().pipe(map(
dishes => dishes.filter(
dish => {
//returns true or false for every dish in dishes
this.favorites.some(el => el === dish.id)
}
)
));
}
菜肴服务:
getDishes(): Observable<Dish[]> {
return this.http.get<Dish[]>(baseURL + 'dishes')
.pipe(catchError(this.processHTTPMsgService.handleError));
}
在重新加载页面后,已被标记为“收藏”的菜式不会保留该标记,因此我必须利用Ionic存储器来解决此问题。
下面是我做的忽略过滤器并返回所有可观察到的菜肴的操作:
最喜欢的服务
:getFavorites(): Observable<Dish[]> {
return this.dishservice.getDishes().pipe(map(
dishes => dishes.filter(
async dish => {
await this.storage.get("favorites").then(
result => {
//returns true or false for every dish in dishes
//console.log(result.some(el => el === dish.id));
return result.some(el => el === dish.id);
}
)
})
));
}
我没有任何错误,所以我真的对为什么会发生这种情况感到困惑。这可能与此question有关,但我不确定。
我在这里想念什么?
答案 0 :(得分:0)
尝试
getFavorites(): Observable<Dish[]> {
return this.dishservice.getDishes().pipe(map(
dishes => {
let favorites=await this.storage.get("favorites");
return dishes.filter(
dish => {
favorites.some(el => el === dish.id)
})}
));
}
答案 1 :(得分:0)
好,所以我设法跳出了思路,找到了解决方案。
代替修改收藏夹服务,我只需要初始化收藏夹:Array;与存储。更少的代码和解决的问题。
storage.get('favorites').then(favorites => {
if (favorites) {
console.log(favorites);
this.favorites = favorites;
}
else {
this.favorites = [];
}
});