我正在使用Angular与Firebase控制台连接的Web项目进行工作,并且使用了服务类中定义的此函数来在保存之前验证数据库中是否存在该值,当我在组件中调用此函数时,通常会得到< strong>未定义的值。
这是我的服务功能:
ifExist(category : CategoryType){
firebase.database().ref("/categories/").child("categories").orderByChild("category_name").equalTo(category.category_name)
.once( "value" , snapshot => {
if (snapshot.exists()){
const userData = snapshot.val();
console.log("exists!", userData);
return true;
}
return false;
});
}
答案 0 :(得分:0)
从Firebase异步加载数据。 return false
会在调用if (snapshot.exists()){
之前运行,因此您始终会返回false。
解决方案是兑现承诺:
ifExist(category: CategoryType) {
return firebase.database().ref("/categories/").child("categories")
.orderByChild("category_name").equalTo(category.category_name)
.once("value", snapshot => {
if (snapshot.exists()) {
const userData = snapshot.val();
console.log("exists!", userData);
return true;
}
return false;
});
}
以及调用该函数时的用法,可以通过以下方式使用:
ifExist(yourCategoryType).then((result) => {
console.log("ifExist returned "+result);
});
或更现代的async
/ await
:
const result = await ifExist(yourCategoryType)
console.log("ifExist returned "+result);
另请参阅: