为什么我得到带有服务angularjs的$$状态变量

为什么我得到带有服务angularjs的$$状态变量,angularjs,Angularjs,我只想从控制器中获取变量中的服务,但它会给我一个$$状态对象 这是我的控制器 $scope.myDataSMS = ServiceSms.async().then(function(data){ $scope.myDataSMS1 = data; console.log($scope.myDataSMS1); return $scope.myDataSMS1; }); console.log($scope.myDataSMS); 和我的服务 routeAppCont

我只想从控制器中获取变量中的服务,但它会给我一个$$状态对象

这是我的控制器

$scope.myDataSMS = ServiceSms.async().then(function(data){
    $scope.myDataSMS1 = data;
    console.log($scope.myDataSMS1);

    return $scope.myDataSMS1;
});

console.log($scope.myDataSMS);
和我的服务

routeAppControllers.factory('ServiceSms', function($http,Token) {

    var key = Token.CreateToken()

    var myService = {

        async: function() {

            var data = 'token=' + encodeURIComponent(key);

            var promise =  $http({
                method: 'POST',
                url: 'PhpFunction/getsms.php',
                data: data,
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            })

                .then(function(data) {

                    // The then function here is an opportunity to modify the response
                  //   console.log(data.data);

                    // The return value gets picked up by the then in the controller.
                    return data.data;
                })

            // Return the promise to the controller
            return promise;
        }
    };
    return myService;
});
我认为问题在于承诺,但我有点被卡住了

如果有人能帮助我,请


提前感谢

这将是写下您的承诺的更好方式:

控制器:

.controller('nameofcontroller', ['$scope', 'ServiceSms', function($scope, ServiceSms) {
    $scope.myDataSMS = ServiceSms.async()
      .then(
        function(data){
          $scope.myDataSMS1 = data;
          console.log($scope.myDataSMS1);
          return $scope.myDataSMS1;
        },
        function(err){
          console.log('err: ' + err);
        });
}]);
routeAppControllers.factory('ServiceSms', function($http,Token) {
   return {
      async: function() {
        var data = 'token=' + encodeURIComponent(key);
        return $http({
           method: 'POST',
           url: 'PhpFunction/getsms.php',
           data: data,
           headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        });
      }
    }
});
服务:

.controller('nameofcontroller', ['$scope', 'ServiceSms', function($scope, ServiceSms) {
    $scope.myDataSMS = ServiceSms.async()
      .then(
        function(data){
          $scope.myDataSMS1 = data;
          console.log($scope.myDataSMS1);
          return $scope.myDataSMS1;
        },
        function(err){
          console.log('err: ' + err);
        });
}]);
routeAppControllers.factory('ServiceSms', function($http,Token) {
   return {
      async: function() {
        var data = 'token=' + encodeURIComponent(key);
        return $http({
           method: 'POST',
           url: 'PhpFunction/getsms.php',
           data: data,
           headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        });
      }
    }
});

感谢您的回复,但它给了我一个承诺,如何获得我的这一承诺的元素{:“待定”}您仍然需要在控制器中使用
.then()
执行承诺。也许您没有将范围变量设置为正确的对象。可以尝试
$scope.myDataSMS1=data.data
@Gazano请说得更清楚些,如果可以的话,也请提供一个提琴或您要返回的错误。@estus您是对的,在这种情况下,返回承诺是多余的,因为$http已经返回了一个承诺。检查编辑,它现在应该是好的。接得好!是的,现在看起来不错。我不确定我是否正确理解了这个问题,但可能$scope.myDataSMS根本不应该分配给promise。OP似乎希望将其分配给结果,但这不会发生。关于“$$state对象”在哪里,问题还不够清楚。首先,我确定它不会给您$$state对象。它给您一个包含$$state属性的对象(promise)。当然,
console.log($scope.myDataSMS)
将输出一个承诺。因为myDataSMS是一个承诺。myDataSMS1是最有希望的结果。