无法从可观察对象数组中返回已过滤的可观察对象

时间:2019-10-09 04:38:50

标签: angular ionic-framework rxjs

我正在尝试从可观察对象数组中返回可观察对象的过滤版本。我有两个服务,一个服务从服务器获取菜肴并返回可观察的菜肴数组,另一个服务利用该服务并获取已被标记为收藏的菜肴,该服务还应返回一个数组或可观察的菜肴。

起初,我能够通过使用常规数组来检索预期的结果。请参见下面的工作代码:

最喜欢的服务

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有关,但我不确定。

我在这里想念什么?

2 个答案:

答案 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 = [];
      }
    });