Проблема заключалась в том, что я зацикливался на массиве, который будет запрашиваться в базе данных firebase, вместо ожидания возврата этого запроса, он продолжит цикл, даже если обещание возврата не выполнено.
Код ниже выполняется следующим образом: если пользователь вводит его, он проверяет, существует ли он, и если он существует, он запрашивает базу данных реального времени, чтобы получить определенные «данные», сохраненные после регистрации.
Проблема в том, что он не будет ждать запроса в базе данных реального времени, он сразу же зациклится, а затем выполнит запрос, который является неправильным. Я знаю, что запрос в firebase возвращает функцию, но как мне ее связать? Или есть ли способ сделать это легко? Спасибо, кстати
loginIdentification = ['citizen','bfp','ndrmmc','pnp','rta'];
loginAuthentication(email:any,password:any){
this.loginFireAuth.signInWithEmailAndPassword(email, password).then(async authData =>{
if(authData.uid){
for (var counter = 0; counter < this.loginIdentification.length; counter++) {
console.log('counter');
await this.searchuser(counter,authData.uid);
}
}
console.log(JSON.stringify(authData.uid));
}).catch(function (error) {
var errorCode = error.code;
var errorMessage = error.message;
console.log("error code : " + errorCode + " errorMessage : " + errorMessage);
});
}
searchuser(counter,userid){
var that = this;
if(counter == 0){
that.loginFiredatabase.ref('users/' + that.loginIdentification[counter] + '/' + userid).on('value',async function (snapshot) {
await new Promise(function (resolve, reject) {
if (snapshot.exists()) {
console.log(JSON.stringify(snapshot));
return resolve();
}
else{
return reject();
}
});
});
}
else {
that.loginFiredatabase.ref('users/' + that.loginIdentification[counter] + '/' + userid).on('value',async function (snapshot) {
await new Promise(function (resolve, reject) {
if(snapshot.exists()) {
console.log(JSON.stringify(snapshot));
return resolve();
}
else {
return reject();
}
});
});
}
}