Сервис медленнее, чем страница | Ионная 4 | Firebase - PullRequest
1 голос
/ 19 мая 2019

Прежде всего: я очень новичок в кодировании в целом.Извините, если этот вопрос глупый ^^ Я попытался создать простое приложение на Ionic с FireStore.Теперь я хотел создать несколько простых сервисов.Теперь у меня есть проблема, что служба получает данные после того, как «this.userData = this.userService.currUser».Что у меня нет данных в this.userData.

Как это сделать правильно?: /

Спасибо!

Служба:

export class UserServiceService {
  public currUser: any;
  private currUserRef: any;

  constructor(private afs: AngularFirestore, public afAuth: AngularFireAuth) {
    const currUserId = afAuth.auth.currentUser.uid;
    this.currUserRef = afs.collection('users').doc(currUserId).valueChanges();
    this.currUser = this.currUserRef.subscribe(data => {
      return data;
    });
  }
}

Страница:

export class EventlistPage implements OnInit {

  private events: Observable<Event[]>;
  private userData;

  constructor(private eventService: EventService, private afAuth: 
  AngularFireAuth, public userService: UserServiceService) { }

  ngOnInit() {
    this.events = this.eventService.getEvents();
    this.userData = this.userService.currUser;
  }

}

1 Ответ

0 голосов
/ 19 мая 2019

Преобразуйте Observable в Promise и используйте .then()

Так ваша служба будет выглядеть следующим образом

export class UserServiceService {
  public currUser: any;
  private currUserRef: any;
  constructor(private afs: AngularFirestore, public afAuth: AngularFireAuth) {
    const currUserId = afAuth.auth.currentUser.uid;
    this.currUserRef = afs.collection('users').doc(currUserId).valueChanges();
  }
  getDataFromFireStore(){
   return this.currUserRef.toPromise();
  }
}

И в вашем классе пользователя

export class EventlistPage implements OnInit {
  private events: Observable<Event[]>;
  private userData;
  constructor(private eventService: EventService, private afAuth: 
  AngularFireAuth, public userService: UserServiceService) { }

  ngOnInit() {
    this.events = this.eventService.getEvents();
    this.userService.getDataFromFireStore().then(data => this.userData = data);
  }

}
...