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

0

В моей функции resolver у меня есть цикл, который вызывает 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);         
}

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

  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 в $q.all выше.

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

Теги:
angular-ui-router

1 ответ

0

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

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);         
}
  • 0
    спасибо, я попробовал ваш путь, но функция не возвращает данные, записанные http servicve
  • 0
    кстати я не получаю никаких ошибок

Ещё вопросы

Сообщество Overcoder
Наверх
Меню