我在尝试处理 Firebase 中的网络连接丢失重新连接时遇到问题。
当连接重新建立时,它会正常工作并将用户数据再次写回firebase,但随后它会立即再次将其删除。据我所知, onDisconnect.remove() 函数似乎无序触发。
这是我的代码,也许有人可以发现问题或提出更好的方法来处理网络连接丢失:
var userListRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/');
var meetingId = $('#meetingIdInput').val();
var myUserId = $('#myIdInput').val();
var userName = $('#nameInput').val();
var avatar = $('#myImage').val();
var myUserRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/' + meetingId + '/users/' + myUserId);
var usersRef = new Firebase('https://myrecovery.firebaseIO.com/tsmusers/' + meetingId + '/users');
var connectedRef = new Firebase("https://myrecovery.firebaseIO.com/.info/connected");
// CHECK FIREBASE PRESENSE
connectedRef.on("value", function(isOnline) {
if (isOnline.val() === true) {
console.log('Connected to Firebase');
// FIRE FUNCTION TO CONNECT TO THE MEETING
connectToMeeting();
} else {
console.log('Disconnected from Firebase');
// REMOVE USER FROM FIREBASE ON DISCONNECT
myUserRef.onDisconnect().remove();
}
});
// CONNECT TO THE MEETING
function connectToMeeting() {
// ADD USER TO FIREBASE MEETING->USER TABLE
myUserRef.set({userId: myUserId, userName: userName, avatar: avatar});
// CONNECT TO OPENTOK
session.connect(apiKey, token);
}
// ADD USER TO ATTENDEE SECTION ON CONNECTION
usersRef.on('child_added', function(snapshot) {
var user = snapshot.val();
displayConnectedUser(user.userId, user.avatar, user.userName);
});
function displayConnectedUser(userId, avatar, userName) {
$('#attendees').prepend('<div id="attendee_' + userId + '" class="attendee_box">' + avatar + '<br />' + userName + '</div>');
}