Подождите, пока данные о хранилище перед вызовом просмотра - PullRequest
0 голосов
/ 28 сентября 2018

Каждый раз, когда запускается мое приложение, я хочу получить данные пользователя из магазина.Так что в моем app.component.ts у меня есть:

constructor(private platform: Platform, ..., private auth: AuthService, private firebaseServie: FirebaseService, private sessionData: SessiondataProvider) {

    //Here i call a function that I have in a service:
    if(this.sessionData.currentUser == undefined || this.sessionData.currentUser == null || this.sessionData.currentUser == ""){
      this.firebaseServie.setUserData(user.email);
    }
    //And then I start the ProfilePage View:
    this.rootPage = ProfilePage;

Служба functipn setUserData вызывает асинхронный запрос к firestore:

  setUserData(email) {
    this.userCollection = this.afs.collection('users', ref => ref.where('email', '==', email));
    this.userCollection.valueChanges().subscribe((item => {
      this.users = item;
      this.sessionData.currentUser = this.users[0].username;
    }));
  }

Так что сервисная функция устанавливает глобальную переменную currentUserapp.component.ts я хочу быть уверенным, что переменная currentUser установлена, ДО запуска представления ProfilePage.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Я решил это с помощью SpinnerDialog.hide() функция SpinnerDialog вызывается в обратном вызове subscribe

0 голосов
/ 28 сентября 2018

Вы можете преобразовать из синхронного в асинхронный код с помощью RxJS Observable.

private asyncCode: Subject = new Subject<any>();
public asyncCode$: Observable = this.asyncCode.asObservable();

setUserData(email): void {
    this.userCollection = this.afs.collection('users', ref => ref.where('email', '==', email));
    this.userCollection.valueChanges().subscribe((item => {
      this.users = item;
      this.sessionData.currentUser = this.users[0].username;
      this.asyncCode.next(true);
    }));
  }

this.asyncCode$.subscribe((status)=>{
    this.rootPage = ProfilePage;
});
...