实时代码中的行为与本地代码

时间:2016-01-04 14:26:39

标签: angularjs

我有一个包含此内容的用户控制器

$scope.followUnfollowUser = function(user) {
    //If followed - unfollow
    if (user.isFollowed) {

        unfollowUser.unfollowUser(user).then(function() {
            user.isFollowed=!user.isFollowed
        }, function() {
        })

        Notification.success(user.name + ' wordt niet meer gevolgd.');

    } else {

        followUser.create({
            followed_id: user.id
        }).then(function() {
            user.isFollowed=!user.isFollowed
        }, function() {
        })

        Notification.success(user.name + ' wordt nu gevolgd.');
    }
  init();
}

var init = function () {

  loadCurrent_user.loadCurrent_user().then(function(response) {
    $scope.current_user = response.data;

    usersService.loadUsers().then(function(response) {
      $scope.users = response.data;
      //Iterate and create isFollowed property
      angular.forEach($scope.users, function(user) {
        user.isFollowed = isFollowed(user.id);
      })
      console.log ($scope.current_user.following)
    })

    var isFollowed = function(userId) {

      var following = $scope.current_user.following;
      for (var i = 0; i < following.length; i++) {
        if (following[i].id == userId) {
            return true;
        }
      }
      return false;
    }

  });

}

这个模板,

%ul{"ng-repeat" => "user in users"}
  %li
    name: {{ user.name }}
    %br

    %a{"ng-click" => "followUnfollowUser(user)"}
      -# {{ user.isFollowed }}
      {{ user.isFollowed ? "Unfollow user" : "Follow user"}}

当我在本地使用我的应用关注或取消关注用户时,console.log ($scope.current_user.following)会使用正确数量的对象进行更新。

例如本地我跟随3个用户。 console.log返回3个对象。如果我取消关注用户,console.log将返回2个对象。

但是在我的实时服务器上,console.log ($scope.current_user.following)没有使用该对象进行更新。例如,当我在我的实时服务器上关注0个用户并访问用户页面时。 console.log ($scope.current_user.following)返回0个对象(因为我没有关注用户)。当我点击用户的关注链接时,我会收到关于我关注用户的通知,如果我检查了我的current_user.json,则表明我关注了用户,当我检查{时{1}}它还表明我跟随用户。但我的relationships.json返回0个对象。

当我点击链接以跟随另一个用户时,console.log ($scope.current_user.following)返回1个对象(之前是用户,同时它应该显示2个对象。前一个和当前跟随的用户对象。)

所以在实时服务器上,console.log ($scope.current_user.following)始终是落后者。

1 个答案:

答案 0 :(得分:0)

在跟踪我的数据流后,我发现loadCurrent_user.loadCurrent_user().then(function(response)中的init函数与实际数据不同步。我不知道为什么。但是将loadCurrent_user.loadCurrent_userusersService.loadUsers函数移到init之外,并移动到实际的followUnfollowUser if / else语句中。现在正确检索数据并更新视图。