Функция разрешения ничего не возвращает

В моей функции распознавателя у меня есть цикл, который вызывает службу http в каждой итерации:

function detailedReportDataResolver($stateParams, reportService) {
    var promises = [];
    var frequenciesArr = $stateParams.frequencies.split(',').map(function (item) { return parseInt(item, 10); });

     angular.forEach(frequenciesArr, function (freq, key) {
         reportService.getDetailsReport($stateParams.clientId, $stateParams.date, freq).then(function (result) {
             promises.push(result.data);
        });
     });
     return $q.all(promises);         
}

Вот как я вызываю функцию распознавателя в моем модуле:

  resolve: {
    detailedReportData: ["$stateParams", "reportService", detailedReportDataResolver]
      }

Вот сервис:

(function () {
    "use strict";

    angular.module("reportBuilder").factory("reportService", ["$http", "config", reportService]);

    function reportService($http, config) {
        var serviceUrl = config.baseUrl + "api/Reports/";
        var service = {
            getDetailsReport: detailsReport
        };

        return service;


        function detailsReport(clientId, date, frequencies) {

            if (!date && !clientId) return null;
            return $http.get(serviceUrl + "ReportDetailed/" + clientId + "/" + date + "/" + frequencies);
        }

    }
})();

Мне нужно дождаться завершения службы http, прежде чем начинать следующую итерацию цикла и возвращать результат. Для этой цели я использую $q.all в функции распознавателя выше.

Но функция разрешения ничего не возвращает. Есть идеи, что я делаю неправильно? Почему функция разрешения ничего не возвращает?


person Michael    schedule 24.07.2016    source источник


Ответы (1)


Массив обещаний составлен неправильно. Ты можешь попробовать:

function detailedReportDataResolver($stateParams, reportService) {
    var promises = [];
    var frequenciesArr = $stateParams.frequencies.split(',').map(function (item) { return parseInt(item, 10); });

     angular.forEach(frequenciesArr, function (freq, key) {
         var promise = reportService.getDetailsReport($stateParams.clientId, $stateParams.date, freq).then(function (result) {
             return result.data;
        });
        promises.push(promise);
     });
     return $q.all(promises);         
}
person Arun Ghosh    schedule 24.07.2016
comment
спасибо, я попробовал ваш способ, но все же функция не возвращает данные, полученные http servicve - person Michael; 24.07.2016