【问题标题】:Angular HTTP promise returns emptyAngular HTTP 承诺返回空
【发布时间】:2015-11-04 05:16:32
【问题描述】:

我有一个带有 HTTP GET 请求的工厂,并且我按照文档所说的那样使用了承诺,使用 $q 服务,但它返回一个空承诺:

App.factory('dataFactory', ['$rootScope','$http','$q', function($rootScope,$http,$q) {

  // Objeto del factory 
  var fac = {};

  // Funcion que obtiene un mensaje completo
  fac.obtenerListaMensajes = function(compania,userhid){

    var deferred = $q.defer(); 

    $http({ 
            method: 'GET', 
            url: urlListaMensajes, 
            params: {company:compania,userhid:userhid}
          }).
      then(function(response) {

        deferred.resolve(response.data.messages);

        console.log(JSON.stringify(deferred.promise));

        }, function(error) {
          deferred.reject(error);
    });

    return deferred.promise;
  };

  return fac;

}]);

控制器:

App.controller('MailFolderController', ['$scope','$rootScope','dataFactory', '$stateParams', function($scope, $rootScope, dataFactory, $stateParams) {

  // Variables de PRUEBA
  var user_prueba = 'MTQzMjU4NjUyNDcxMzczNzQwNjE3MTg1ODMxMDY5OTQ2';
  var company_prueba = 'development';

  $scope.mails = dataFactory.obtenerListaMensajes(company_prueba,user_prueba);
}]);

$scope.mails 中的最终值为:

{"$$state":{"status":0}}

我知道 HTTP 请求可以正常工作,这要归功于其中的 console.log。

我做错了什么?我可以使用 $rootScope 来返回值,它可以工作,但这是一个糟糕的编程策略。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    在控制器中使用服务的正确方法是:

    dataFactory.obtenerListaMensajes(company_prueba, user_prueba).then(function(data) {
        $scope.mails = data;
    });
    

    您还可以通过删除多余的虚拟延迟对象来改善服务,您不需要它,因为$http 已经返回承诺:

    App.factory('dataFactory', ['$rootScope', '$http', '$q', function ($rootScope, $http, $q) {
    
        // Objeto del factory 
        var fac = {};
    
        // Funcion que obtiene un mensaje completo
        fac.obtenerListaMensajes = function (compania, userhid) {
            return $http({
                method: 'GET',
                url: urlListaMensajes,
                params: {
                    company: compania,
                    userhid: userhid
                }
            }).
            then(function (response) {
                return response.data.messages;
            });
        };
    
        return fac;
    
    }]);
    

    【讨论】:

    • 所以这只是我的无知。谢谢。
    猜你喜欢
    • 2017-08-04
    • 2017-02-21
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多