Невозможно вернуть отфильтрованные наблюдаемые объекты из массива наблюдаемых объектов - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь вернуть отфильтрованную версию наблюдаемых объектов из массива наблюдаемых объектов. У меня есть две службы, одна из которых получает блюда с сервера и возвращает массив наблюдаемого блюда, а другая - использует эту службу и получает блюда, помеченные как избранные, которые также должны возвращать массив или наблюдаемое блюдо. ,

Сначала я смог получить ожидаемые результаты, используя обычный массив. см. рабочий код ниже:

Любимая услуга:

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);
            }
          )
        })
    ));
}

У меня нетлюбые ошибки, так что я действительно загнан в угол, почему это происходит. Это может быть связано с этим вопросом , но я не совсем уверен.

Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Хорошо, так что мне удалось нестандартно мыслить и найти решение.

Вместо того, чтобы изменять любимый сервис, мне просто нужно было инициализировать избранное: Array;с хранением. Меньше кода и проблема решена.

storage.get('favorites').then(favorites => {
      if (favorites) {
        console.log(favorites);
        this.favorites = favorites;
      }
      else {
        this.favorites = [];
      }
    });
0 голосов
/ 09 октября 2019

попробуйте

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)
      })}
    ));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...