如何从在 angularjs 中使用 api 获取数据的工厂获取控制器中的对象数据

How get an object data in controller from a factory that fetch data with api in angularjs

我有一个带有两个函数的控制器,它们都称我为工厂函数:

.controller("Ctrl",function($scope,fetchDataFromServer){

  $scope.dataArray = [];
  $scope.dataArray2 = [];

  $scope.addNew = function () {
     fetchDataFromServer.fetchData()
     .then(function (data) {
        console.log(data);
        // $scope.dataArray.push(data);
     });
  };

  $scope.addNew2 = function() {
    console.log(fetchDataFromServer.fetchData());
  }

})

而且我有一个从 api 获取数据的工厂:

.factory('fetchDataFromServer', function ($http, $q) {
   return {
      fetchData: function() {

           return $http.get('//jsonplaceholder.typicode.com/posts/1')
               .then(function(response) {
                   if (typeof response.data === 'object') {
                       return response.data;
                   } else {
                       // invalid response
                       return $q.reject(response.data);
                   }

               }, function(response) {
                   // something went wrong
                   return $q.reject(response.data);
               });
       }
   };
})

console.log 在 add addNew 给我一个对象 :

Object { userId: 1, id: 1, title: "sunt", body: "quia" }

但是我在我的控制器中给出了这个结果:

{…} ​ "$$state": {…} ​​ status: 1 ​​ value: Object { userId: 1, id: 1, title: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", … } ​​ : Object { … } ​ : Object { then: then() , catch: catch(), finally: finally(), … }

任何人都可以为我解释为什么结果不同以及不同的原因是什么?

我的代码在 plunker

在第二个函数中,您正在打印承诺,而您正在打印的第一个函数已解决 value/result 承诺。

$scope.addNew2 = function() {
    fetchDataFromServer.fetchData()
    .then(function (data) {
        console.log(data);
        // $scope.dataArray.push(data);
     });
}