我是全新的Firebase用户,正在尝试构建一个简单的应用程序 - 而且我遇到了一个奇怪的问题,我无法找到解决方案。
这就是我正在做的事情。
我有一个简单的用户Firebase数据库,看起来像这样:
{
"users": {
"randomlyAssignedId": {
"phoneNumber": "+18882223333"
}
}
}
我的想法是,每个使用我服务的用户都有一个用户对象(每个用户对象只包含一个phoneNumber
字段)。
我已经将它存储在Firebase中并且已经存在。
现在,事情变得棘手了。我想编写一个查询,通过phoneNumber
返回用户。因此,在阅读了Firebase文档之后,我想出了以下内容:
var Firebase = require('firebase');
var users = new Firebase('https://demo.firebaseio.com/users');
users.orderByChild('phoneNumber').equalTo('+18882223333').limitToFirst(1).once('value', function(snapshot) {
console.log('API call succeeded:', snapshot.val());
}, function(err) {
console.log('Firebase returned an error:' err);
});
当我运行此代码示例时,用户对象成功登录到控制台(它找到了匹配,是啊!),但是 - 回调永远不会完成。
根据.once()
的Firebase文档:https://www.firebase.com/docs/web/api/query/once.html,成功(或错误回调)应该只触发一次。
这似乎没有发生:(
有人能告诉我这是不是想要的行为,还是我做错了什么?
谢谢! < 3
答案 0 :(得分:1)
我认为你所期待的只是一点点。
.once()调用中有2个函数:
.once("value",function(snapshot){
....
},function(err){
console.log('Did not find a user in the database:');
console.log(err);
})
但是,如果找不到数据,则不会使用您正在寻找可能的错误值的第二个函数。第二个功能是缺少授权/许可。我想你正在寻找这样的东西:
.once("value",function(snapshot){
if(snapshot.val()){
console.log('Found existing user by phoneNumber in database:');
console.log(snapshot.val());
}else{
console.log('Did not find a user in the database:');
console.log(err);
}
},function(err){
console.log('Not authorized');
console.log(err)
})
如果在数据库中找不到您的数据(用户的电话号码),则snapshot.val()的结果将为null。如果您在firebase上设置了auth规则并且在发出此请求时未满足它们,则第二个回调函数将仅包含错误值。
您可以在这里阅读更多内容: https://www.firebase.com/docs/web/api/query/once.html