2016-08-14 2 views
1

Я создал этот 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 будет заселено данными и только после того, как оно будет заполнено данными, тогда могут быть выполнены дальнейшие строки. В настоящее время я получаю обещание и код выполняется дальше.

EDIT (в соответствии с ответом Даррена):

Я изменил мою службу и функцию, которая вызывает обслуживание:

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 не будет заполнено данными?

+0

Ну, вы не можете. Положите логику, которая нуждается в 'result.data' в блоке' then'. –

+0

Вы должны передать в работу, которую хотите сделать как функцию. – Casey

ответ

1

Вы можете использовать .then по методу обслуживания $ HTTP

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

Все, что будет делать, это перемещение, где обещание будет разрешено - это не делает его синхронным, поэтому OP останется с той же проблемой. – Lex

+0

Я внесла некоторые изменения в вопрос. Можете ли вы сейчас это увидеть? – Michael

+0

@ DarrenDavies, как заметил Лекс, это совершенно не имеет значения. – developer033

1

Вы не можете сделать это. Весь аспект promises предназначен для обработки запроса async и выполнения, когда обещание разрешено/отклонено. Если вы хотите, чтобы какой-то фрагмент кода выполнялся после заполнения данных, переместите эту часть кода в блок .then.

Смежные вопросы