等到 $http 完成,以便在 AngularJS 中输出结果

Wait till $http is finished in order to output the result in AngularJS

如何使用我的函数等待 $http 请求完成?

我的 services.js 看起来如下:

var app = angular.module('starter.services', []);

app.factory('Deals', function($http) {
    function getDeals() {
        $http.get('http://www.domain.com/library/fct.get_deals.php')
        .success(function (data) {
            var deals = data;
            return deals;
        })
        .error(function(err){
      });
  }

  return {
    all: function() {
        return getDeals();
    },
    get: function(keyID) {
        //...
    }
  }
});

我的 controllers.js 看起来像:

var app = angular.module('starter.controllers', []);

app.controller('DealCtrl', function($scope, Deals) {
    $scope.deals = Deals.all();
    console.log($scope.deals);
});

我的 controllers.js 文件中的 console.log 输出 "undefined",但是当我在 getDeals() 函数中输出交易时,它包含我从服务器。

我做错了什么?

$http 和 angularjs return 中的所有异步服务 promise 对象。参见 promise api

您需要使用 then 方法将其赋值给范围内的值。

所以你的控制器:

app.controller('DealCtrl', function($scope, Deals) {
    Deals.all().then(function (deals) {
        $scope.deals = deals;
        console.log($scope.deals);
    });
});

您的服务

app.factory('Deals', function($http) {
    function getDeals() {
        return $http.get('http://www.domain.com/library/fct.get_deals.php')
        .success(function (data) {
            var deals = data;
            return deals;
        });
  }

  return {
    all: function() {
        return getDeals();
    },
    get: function(keyID) {
        //...
    }
  }
});