Возвращаемое значение изнутри наблюдаемой подписки и карты () - PullRequest
0 голосов
/ 06 мая 2018
getPlayerFromMatchDayAvailable(player:Player, id:String):string{

  this.playerscollection = this.afs.collection<Player>(`matchdays/${id}/availablePlayers`, ref => ref.where('email','==','john@test.com'))
  this.players2 = this.playerscollection.snapshotChanges()
  this.players2.subscribe( data => {
    if(data){
      console.log(data);
      data.map(test => {
        console.log(test.payload.doc.id); -> **need to return this**
        this.af = test.payload.doc.id;

      });

    }

  });




  console.log(this.af)
  return this.af;



  //  this.players2.forEach(player => {
  //    player.forEach(playerData => {
  //      let data = playerData.payload.doc.data();
  //      let ids = playerData.payload.doc.id;
  //      this.af = playerData.payload.doc.id;
  //      console.log(id,data)

  //    });
  //  });




  }

Нужно вернуть значение test.payload.doc.id в виде строки, чтобы я мог использовать его внутри файла component.ts. Пожалуйста, дайте мне знать, как вернуть это значение из подписки.

РЕДАКТИРОВАТЬ 2

Изменена подписка внутри компонента и назначен идентификатор строковой переменной. Мне нужен идентификатор в этом методе, чтобы удалить документ из вложенной коллекции в firestore. Я думаю, что не могу присвоить значение переменной внутри функции .map (), может быть?

  onNotAvailableClick(){
    this.authService.getAuth().subscribe(auth => {
      if(auth){
        this.loggedInUser = auth.email;

        this.playerService.getPlayers().subscribe(players => {
          this.allPlayers = players;
         // console.log(users);

        //  console.log(this.loggedInUser);


        this.myPlayer = this.allPlayers.filter(user => user.email == this.loggedInUser)
        //  console.log(this.myUser);

        this.currentUser = this.myPlayer[0];

        this.p = this.matchdayService.getPlayerFromMatchDayAvailable(this.myPlayer[0],this.id)
        this.p.subscribe( data => {
            if(data){
              console.log(data);
              data.map(test => {
                console.log(test.payload.doc.id);
                this.pid = test.payload.doc.id;

              });

            }

          });

        console.log(this.pid)
        });




      }else{

      }
    });
  }
...