问题是我正在循环查找要在Firebase数据库中查询的数组,而不是等待该查询返回,即使未执行return promise,它也会继续循环。
下面的代码是这样执行的,如果用户输入它,则检查它是否存在,如果存在,它将查询实时数据库以获取通过注册保存的特定“数据”。
问题是它不会等待实时数据库中的查询,而是会立即循环然后执行错误的查询。我知道Firebase中的查询会返回一个函数,但是如何链接它呢?还是有什么方法可以轻松做到这一点?谢谢btw
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();
}
});
});
}
}