我尝试使用Firebase和Ionic构建聊天应用程序。
如果我直接通过以下网址打开聊天页面:
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
由于
答案 0 :(得分:1)
由于firebase是异步的,因此您使用promises来处理异步操作。这意味着您应该添加一个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);
});
答案 1 :(得分:0)
使用firebase.database.enableLogging(true);
进行调试后,我已经找到了听众的内容。
在RootController上还有另一个refMessage.child("profile_photo")
的调用,如果我直接刷新聊天页面,.once
关闭该路径上的所有监听器,我就无法从我的ChatController中获取数据&#39; s firebase电话。