Мой код возвращает значение в реальном времени:
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 имеет значение.





Сделайте что-то вроде этого:
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*/
}