Ошибка: свойство ‘then’ не существует для типа ‘void’

#angular #typescript #firebase #ionic-framework

#angular #typescript #firebase #ионный фреймворк

Вопрос:

Я пытаюсь получить некоторую информацию о статусе пользователя (IsDeleted: true / false) из базы данных Firebase в реальном времени, когда пользователь хочет войти в мобильное приложение. При попытке этого я получил эту ошибку:

Свойство ‘then’ не существует для типа ‘void’

Код выглядит следующим образом:

login.page.ts

   loginUser() {
    const data = this.loginForm.value;
    if (!data.userName) {
      return;
    }

    this.loadingCtrl.create({
      message: 'Loading...'
    }).then((res) => {
      res.present();
    });

    const credentials = {
      email: data.userName   this.username_domain,
      password: data.password
    };

    this.authService.loginUser(credentials)
      .then(res => {
        this.userService.setOrgId(res.user.photoURL);
        this.loadingCtrl.dismiss();
        this.router.navigateByUrl('/tabs');

        //The error occours here.
        this.userService.getUserStatus().then((isDeleted: any) => {
          console.log('isDeleted ', isDeleted)
          if (isDeleted) {
            err => {
              this.loadingCtrl.dismiss();
              this.toast = this.toastCtrl.create({
                message: 'Your account is not active anymore.',
                duration: 2000
                  });
              } 
              this.authService.logoutUser()
              .then(async (res) => {
                this.clearLocalData();
                this.navCtrl.navigateRoot('login');
              })
              .catch(error => {
                console.log(error);
              });
          }
        });

      }, err => {
        this.loadingCtrl.dismiss();
        this.toast = this.toastCtrl.create({
          message: err.message,
          duration: 2000
        }).then((toastData) => {
          toastData.present();
        });
      });
    }
 

user.service.ts

 getUserStatus() {
   firebase.database().ref(`organizationData/${this.orgId}/users/${this.uId}/isDeleted/`).get().then(function(snapshot) {
      if (snapshot.exists()) {
        console.log(snapshot.val());
      }
      else {
        console.log("No data available");
      }
    }).catch(function(error) {
      console.error(error);
    });
  }
 

Кто-нибудь знает, как это исправить?

Ответ №1:

getUserStatus() ничего не возвращает, вам нужно сделать следующее:

 getUserStatus() : Promise<DataSnapshot> {
   return firebase.database().ref(`organizationData/${this.orgId}/users/${this.uId}/isDeleted/`).get();
  }
 

Комментарии:

1. Это устранило проблему. Большое спасибо, Питер.

2. Но теперь я не получаю флаг в функцию login.page.ts. У вас также может быть решение для этого?

3. вы это isDeleted понимаете?

4. Я получаю user.service.ts: 51: «true», но login.page.ts: 84: «не определено». Извините, но я совсем новичок в TS.

5. вы изменили служебную функцию, как я сказал? Попробуйте использовать .then((snapshot: DataSnapshot) => {