AngularJS工厂返回State对象,而不是promise中的JSON数据

AngularJS factory returning State object instead of JSON data from promise

本文关键字:promise 中的 JSON 数据 返回 工厂 State 对象 AngularJS      更新时间:2023-09-26

我已经制作了两个工厂,从第二个工厂调用第一个,在控制器中消费第二个工厂,但不是作为JSON获取数据,而是作为$$State获取数据。我刚接触angularJS,尝试了很多方法都没能解决,请帮忙。

 app.factory('userDetails', ['APIService', '$q', function (APIService, $q) {
    getDetails: function () {
        var deferred = $q.defer();
        var getFunc = function () {
            APIService.doGetCall('Masters/employee/username/tarun')
                .then(
                function (data)
                { 
                    deferred.resolve(data);
                },
                function (data, status, headers, config)
                { 
                    deferred.reject('There was an error creating object'); })
                    return deferred.promise;
                 }
        var a = getFunc();
        return a;
    }
}
 vm.user = userDetails.getDetails();
console.log("user",vm.user);

响应如下代码段

所示反应

您应该使用.then函数在那里获得响应。我宁愿说,你不需要创造额外的承诺,这是一个anti-pattern。其中可以直接利用doGetCall方法的承诺返回值

app.factory('userDetails', ['APIService', '$q', function(APIService, $q) {
  getDetails: function() {
    var getFunc = function() {
      return APIService.doGetCall('Masters/employee/username/tarun');
    }
    var a = getFunc();
    return a;
  }
}]);
vm.user = userDetails.getDetails().then(function(response){
    console.log(response.data);
    vm.user = response.data;
    console.log("user", vm.user);
}, function(error){
    console.log(error)
}).catch(exceptionHandler);

userDetails.getDetails()返回一个承诺,因此您需要使用.then(onsuccess, onRejected)

userDetails.getDetails().then(function(data){
   vm.user = data;
   console.log("user",vm.user);
});

return deferred.promise;

行在APIService中。doGetCall函数。它应该在它的外面