Fungsi Resolver tidak mengembalikan apa pun

Dalam fungsi penyelesai saya, saya memiliki loop yang memanggil layanan http di setiap iterasi:

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);         
}

Inilah cara saya memanggil fungsi penyelesai di modul saya:

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

Ini layanannya:

(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);
        }

    }
})();

Saya harus menunggu layanan http selesai sebelum memulai iterasi loop berikutnya dan mengembalikan hasilnya. Untuk tujuan ini saya menggunakan $q.all pada fungsi solver di atas.

Tetapi fungsi penyelesai tidak mengembalikan apa pun. Tahu apa yang saya lakukan salah? Mengapa fungsi penyelesai tidak mengembalikan apa pun?


person Michael    schedule 24.07.2016    source sumber


Jawaban (1)


Susunan janji tidak disusun dengan benar. Bisakah Anda mencoba:

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
terima kasih saya sudah mencoba cara Anda tetapi fungsinya tetap tidak mengembalikan data yang diambil oleh layanan http - person Michael; 24.07.2016