使用$ window.onbeforeunload保存数据,然后注销firebase数据库

时间:2016-07-29 21:14:18

标签: javascript angularjs firebase-realtime-database

当用户关闭或刷新浏览器时,我想将时间保存到firebase数据库,然后将它们从firebase中注销。

我可以使用$window.onbeforeunload执行其中一项操作,但在尝试同时执行这两项操作时失败。

我可以通过以下方式节省时间:

    $scope.onExit = function () {         
      userRef.update({ lastLogin: Firebase.ServerValue.TIMESTAMP });    
    };
    $window.onbeforeunload = $scope.onExit;

或者我可以通过以下方式将用户注销(使用注销服务):

    $scope.onExit = function () {         
      logOutService.logoutUser();    
    };
    $window.onbeforeunload = $scope.onExit;

如果我将两者结合起来只有第一项有效(在下面的例子中只记录时间)

我创建了单独的函数并将它们组合在一起,但仍然只有第一个函数可以工作。

    $scope.onExit = function () {         
      userRef.update({ lastLogin: Firebase.ServerValue.TIMESTAMP });    
    };

    $scope.logOut = function () {         
      logOutService.logoutUser();    
    };


    $scope.combined = function () {
      $scope.logout();
      $scope.onExit();
    };

    $window.onbeforeunload = $scope.combined;

任何指针都非常感谢!

更新

好的,如果我将$scope.onExit();放在$scope.logout();之前(我简化了问题的方案),上面的确有效。当我输入第三个函数时会出现问题:

$scope.onExit1 = function () {
    userRef.update({ lastLoginPrevious: data.lastLogin });
};

$scope.onExit = function () {
    userRef.update({ lastLogin: Firebase.ServerValue.TIMESTAMP });
};

$scope.logOut = function () {         
   logOutService.logoutUser();    
};


$scope.combined = function () {
    $scope.onExit1();
    $scope.onExit();
    $scope.logout();
};

$window.onbeforeunload = $scope.combined;

新功能将当前lastLogin时间针对用户移动到lastLoginPrevious。我是通过使用snapshot()获取data.lastlogin值来实现这一点的,这似乎是导致问题的原因,就像我将data.lastlogin更改为Firebase.ServerValue.TIMESTAMP一样正常有三个功能。在这种情况下我无法使用snapshot()的任何想法?

更新

好的,我已经到底了。我试图从data.lastlogin之外拨打snapshot(),因此它无法正常工作。一旦我将我的函数嵌套在snapshot()中,一切正常。

0 个答案:

没有答案