AngularFireDatabase не извлекает данные синхронно

Мой код возвращает значение в реальном времени:

import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { Usuario } from '../modelos/usuario';
import { UsuarioClass } from './../modelos/usuario-class.model';

@Injectable({
    providedIn: 'root'
})

export class UsuarioService {
    keyUsuario: string;
usuLogin: UsuarioClass;
constructor(
    private dbFireDatabase: AngularFireDatabase) {
}

getAuthenticateUser(
    strLogin: string,
    strPassword: string,
    intEstadoActivo: number) {
    var strKey : string = "";
    var objUsu : UsuarioClass = null;
    var query = this.dbFireDatabase.database.ref("TableUser").orderByKey();
    query.on('value', function(snapshot) {
        snapshot.forEach(function(childSnapshot) {
            objUsu = <UsuarioClass>childSnapshot.val();
            if ((objUsu.LOGIN.trim() == strLogin.trim()) &&
                (objUsu.PASSWORD.trim() == strPassword.trim()) &&
                (objUsu.ESTADO == intEstadoActivo)) {
                strKey = childSnapshot.key;
                return true;
            }
        });
    });
    if ((strKey != "") && (strKey != null) && (strKey != undefined)) {
        xxxxx    //other step.
    }
    }

}

Код хорошо работает при втором вызове функции, а при первом нет. Я пытаюсь использовать async и await, но не знаю, как правильно. В первом вызове strKey пуст, но во втором и последующих вызовах strKey имеет значение.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
27
1

Ответы 1

Сделайте что-то вроде этого:

var query = this.dbFireDatabase.database.ref("TableUser").orderByKey();
  query.once('value', function(snapshot) {

     /*Some code here*/

     return someResult;  
   }
  });                             
});

И затем вызовите эту функцию следующим образом:

this.yourService.getAuthenticateUser().then((result)=>{
     /* use the result*/
  }

Другие вопросы по теме