gpt4 book ai didi

javascript - Firebase 的 .once() 查询方法在被调用后不会停止监听

转载 作者:行者123 更新时间:2023-12-03 08:24:50 25 4
gpt4 key购买 nike

我是一个全新的 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);
});

当我运行此代码示例时,用户对象已成功记录到控制台(它找到了匹配项,是的!),但是 - 回调永远不会完成。

根据 Firebase 文档 .once() : https://www.firebase.com/docs/web/api/query/once.html成功(或错误回调)应该只触发一次。

这似乎没有发生:(

谁能告诉我这是否是理想的行为,或者我是否做错了什么?

谢谢! <3

最佳答案

我认为你所期望的只是有点偏离。

您的 .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 上设置了身份验证规则并且在发出此请求时未满足这些规则,则第二个回调函数将仅包含 err 值。

您可以在这里阅读更多内容: https://www.firebase.com/docs/web/api/query/once.html

关于javascript - Firebase 的 .once() 查询方法在被调用后不会停止监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com