Angular $ http服务等待数据返回

时间:2016-08-14 13:00:46

标签: angularjs angularjs-http

我创建了这个http服务:

(function () {
    "use strict";

    angular.module("inspectionReview").factory("inspectionReviewServices", ["$http", "config", inspectionReviewServices]);

    function inspectionReviewServices($http, config) {
        var serviceAddress = config.baseUrl + "api/InspectionReview/";
        var service = {
            getValues: getValues
        };
        return service;

        function getValues(objectId, frequencyId) {
            return $http.get(serviceAddress + "getValuesByObjectTypeId/" + objectId + "/" + frequencyId);
        }    
    }
})();

在这里,我在控制器中使用它来获取数据:

function checkInspection() {
    var frequencyId = 5;
    inspectionReviewServices.getValues($scope.object.Id, frequencyId).then(function (result) {
       $scope.someData = result.data;
    });
}

当我调用函数checkInspection时,我需要等到$ scope.someData属性由数据填充,并且只有在数据填充之后才能执行更多的行。当前我得到了承诺并且代码被进一步执行。

编辑(根据达伦的回答):

我更改了调用服务的服务和功能:

function getValues2(objectId, frequencyId) {
    return $http.get(serviceAddress + "getValuesByObjectTypeId/" + objectId + "/" + frequencyId).then(function (result) {
        return result.data;
    });
}

这是在控制器中调用服务的函数:

    function checkInspectionReviewValidety() {
        var frequencyId = 5;
        return inspectionReviewServices.getValues2($scope.object.Id, frequencyId)
        }

但我仍然没有得到理想的结果。

如何更改checkInspection函数以使其等待$ scope.someData属性由数据填充?

2 个答案:

答案 0 :(得分:1)

您可以在$ http服务方法

上使用.then
$http.get(serviceAddress + "getValuesByObjectTypeId/" + objectId + "/" + frequencyId).then(function() {
  // Populate items from callback 
});

答案 1 :(得分:1)

你做不到。 promises的整个方面是处理异步请求,并在解析/拒绝承诺时执行。如果您希望在填满数据后执行某段代码,请将该部分代码移到.then块中。