Firebase 无法从数据库获取价值
2016-12-06
116
我尝试使用 Firebase 和 Ionic 构建聊天应用程序。
如果我直接通过 URL 打开聊天页面,例如:
http://localhost:8100/#/home/messaging/jJ53KWgqnuWXSzksRYl1XNw20JJ2
Firebase 似乎无法正常工作。但是,如果我使用以下命令从上一页的菜单打开聊天页面:
ui-sref="home.messaging({id: p.friendId})"
一切正常。
这是我在 ChatController 上的代码:
$scope.data.friendId = $stateParams.id;
var refMessage = firebase.database().ref();
refMessage.child("user_profile").child($scope.data.friendId).once("value")
.then(function (profile) {
$scope.data.friendUserProfile = profile.val();
//on debug this line is reached
});
refMessage.child("profile_photo").child($scope.data.friendId).once("value")
.then(function (profilePic) {
$scope.data.friendUserPhotos = profilePic.val();
//I can't get friend's photos firebase doesnt reach this line.
});
refMessage.child("friends").child($localStorage.uid).child($scope.data.friendId).once("value")
.then(function (friend) {
if (friend.val() !== null) {
$scope.data.isNewFriend = friend.val().isNew;
//on debug this line is reached
}
});
var chatId = 'chat_' + ($scope.data.uid < $scope.data.friendId ? $scope.data.uid + '_' + $scope.data.friendId : $scope.data.friendId + '_' + $scope.data.uid);
问题只出在朋友的照片上。Firebase 不会从数据库调用照片。所有其他调用都可以异步正常工作,但永远不会在调试时获取照片行。
如果我刷新页面并且转到上一页并返回聊天页面,则会出现此问题,一切正常。
我想如果我的
$scope.data
有问题。它不适用于之前的调用
friendUserProfile
,但适用于它。
Firebase v3.6.1
谢谢
2个回答
由于 firebase 是异步的,因此您使用承诺来处理异步操作。这意味着您应该添加一个 catch 方法来查看 Firebase 是否返回错误。
如果不这样做,您将无法确定是否发生了错误。
refMessage.child("profile_photo").child($scope.data.friendId).once("value")
.then(function (profilePic) {
$scope.data.friendUserPhotos = profilePic.val();
//I can't get friend's photos firebase doesnt reach this line.
}).catch(function(error) {
console.log(error);
});
Gregg
2016-12-07
使用
firebase.database.enableLogging(true);
进行调试后,我发现了一些与监听器有关的问题。
RootController 上还有另一个对
refMessage.child("profile_photo")
的调用,如果我直接刷新聊天页面,
.once
会关闭该路径上的所有监听器,我无法从 ChatController 的 firebase 调用中获取数据。
cgrgcn
2016-12-15