Как получить 2 разных значения из одной подписки? - PullRequest
0 голосов
/ 22 марта 2019

Есть ли возможность получить два значения из одной подписки? Первый - это все данные профиля, а второй - просто любимая фильтрация данных по имени. Я хочу использовать наименьшее количество запросов на основе Firebase.

структура БД:

profile{
        uid{
            name,
            age,
            favorite{
                     name,
                     uid,
                    }
            }
        }

это код компонента:

  ngOnInit() {
    this.db.getDataObj("/Profile/" + this.uid).subscribe(res =>{
      console.log("Profile Result");
      console.log(res);
    });
    this.db.getDataObj("/Profile/" + this.uid/favorite).subscribe(res =>{
      console.log("Profile Result");
      console.log(res);
    });

это код услуги:

  getDataObj(objpath:string){
    this.objRef = this.db.object(objpath);
    this.obj = this.objRef.valueChanges();
    return this.obj;
   } 

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Если мое понимание верно, то, пожалуйста, создайте следующие интерфейсы:

interface Profile{
    uid:uid;
}

interface uid{

    name:string;
    age:number;
    favourite:favourite;
}

interface favourite{

    name:string;
    uid:string;
}

, а затем используйте следующее в вашем сервисе:

getDataObj(objpath:string):Observable<Profile>{
    return this.http.get<Profile>(objpath);
}

, а затем прочитайте любимое значение, например:

this.db.getDataObj("/Profile/" + this.uid).subscribe(res<Profile> =>{
    console.log("Profile Result");
    console.log(res.uid.favourite);
});

Если возможно, попытайтесь получить данные, относящиеся к избранным uid, с помощью профиля для этого uid. Таким образом, для получения всех данных вам потребуется только один вызов службы.Если этот вызов не требует больших объемов данных, я думаю, что это путь.В противном случае, если посмотреть на долгосрочную перспективу, если объем данных, которые вы получите в http-вызове службы профилей, должен увеличиться, то используйте отдельные http-вызовы для получения профиля и избранных данных для одного uid.

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

0 голосов
/ 22 марта 2019

Это невозможно.Один запрос всегда будет возвращать один ответ.

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

this.db.getDataObj("/Profile/" + this.uid).subscribe(res =>{
   console.log("Profile Result");
   console.log(res);
});

Здесь "res" должен содержать полный объект профиля (включая«любимый» объект).

Если вы все еще хотите сделать этот код короче / чище, вы можете посмотреть на создание наблюдаемой «молнии».Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...