Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 无法从可观察对象数组中返回筛选的可观察对象_Angular_Ionic Framework_Rxjs - Fatal编程技术网

Angular 无法从可观察对象数组中返回筛选的可观察对象

Angular 无法从可观察对象数组中返回筛选的可观察对象,angular,ionic-framework,rxjs,Angular,Ionic Framework,Rxjs,我试图从可观察对象数组中返回可观察对象的过滤版本。我有两个服务,一个从服务器获取菜肴并返回一个可观察到的菜肴数组,另一个服务利用该服务获取被标记为最喜欢的菜肴,该服务还应返回一个数组或可观察到的菜肴 起初,我能够通过使用常规数组检索预期结果。请参见以下工作代码: 喜爱的服务: favorites: Array<any>; getFavorites(): Observable<Dish[]> { return this.dishservice.getDishes(

我试图从可观察对象数组中返回可观察对象的过滤版本。我有两个服务,一个从服务器获取菜肴并返回一个可观察到的菜肴数组,另一个服务利用该服务获取被标记为最喜欢的菜肴,该服务还应返回一个数组或可观察到的菜肴

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

喜爱的服务:

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));
}
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);
            }
          )
        })
    ));
}
收藏夹:数组,但我不能完全确定

我错过了什么?

试试这个

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)
      })}
    ));
}
getFavorites():可观察{
返回此.dishservice.getDishs().pipe(映射(
菜肴=>{
let favorites=等待这个.storage.get(“favorites”);
回程过滤器(
菜肴=>{
收藏夹.some(el=>el==dish.id)
})}
));
}

好的,所以我设法跳出框框思考,找到了一个解决方案

我不需要修改收藏夹服务,只需要初始化收藏夹:数组;与存储。更少的代码和解决的问题

storage.get('favorites').then(favorites => {
      if (favorites) {
        console.log(favorites);
        this.favorites = favorites;
      }
      else {
        this.favorites = [];
      }
    });