Ionic Angular /为什么在控制器功能结束之前不调用服务

时间:2015-02-09 08:17:37

标签: javascript angularjs ionic-framework angular-promise

我的谜......我有我的控制器和我的服务。 为什么服务LocalDataService.getCacheUserUpdate();还没推出?这是一些代码细节。 我修改了代码以遵循与chatsUpdate相同的模式,但是LocalDataService.getCacheUserUpdate();当我逐步调试时,它会一直被跳过...但是在函数拉动刷新完成后会触发它

谢谢!

我的控制器:

// Check for new updates in conversations and return the number of new messages
  var getChatsUpdates = function() {
    DataService.getHasNewMessages().success(function(response) {
      $scope.chatsUpdates = response.chats_updates;
      //console.log($scope.chatsUpdates)
    });
  };

  var updateUser = function() {
    LocalDataService.getCacheUserUpdate().success(function(response) {
      $scope.user = [];
      $scope.user = DataService.getUser();
    }).error(function() {
      console.log('error on userupdate')
    })
  }

  var updateUserFreeStatus = function() {
    updateUser()
    $scope.user_free_status = [];
    $scope.user_free_status = DataService.getUserFreeStatus();
  }

  $scope.doHomeRefresh = function() {
    console.log('Start refreshing!')
    updateUserFreeStatus()
    getChatsUpdates()
    $scope.$broadcast('scroll.refreshComplete');
    $scope.$apply()
    console.log('refreshed!')
  };

我的服务:

.factory('LocalDataService', function(WebService, $localstorage) {
    return {
        getCacheUserUpdate: function() {
            var userUpdate = WebService.get('profile/get/user/update');

            userUpdate.success(function(response) {
                $localstorage.unset('user')
                console.log(response.user)
                $localstorage.setObject('user', response.user)
            });
            return userUpdate;
        }
        };
})
.factory('DataService', function($q, $localstorage, WebService) {


  return {
    getUser: function() {
        return $localstorage.getObject('user');
    },
    // get updates to check if new messages in conversations
    getHasNewMessages: function() {
        var updates = WebService.get('conversations/updates/new-messages');
        updates.success(function(response) {
            // nothing
        });
        updates.error(function(response) {
            console.log('error in get messages: ' + response)
        });
        return updates;
    }    
  };
})

我真的不知道那里发生的事情......

1 个答案:

答案 0 :(得分:2)

正如Emanual Ralha所说,您的Web服务需要返回promise对象。基本上说:

var foo = $http.get('http://localhost/potatoes/1')

实际上并没有将HTTP调用的结果放入foo中,因为这需要一段时间才能完成,而且这并不是javascript的实际工作方式。

相反,foo是对价值的承诺 - 你需要做的事情

$http.get().then(function(data) {
    $scope.potato = data.data;
});

在那种情况下,回调函数在$ http完成时被调用(它与.success同义,但.success是非标准的,所以习惯.then和.catch),你可以处理结果那时候。