Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度服务问题--在包含承诺的服务中返回数组_Javascript_Angularjs - Fatal编程技术网

Javascript 角度服务问题--在包含承诺的服务中返回数组

Javascript 角度服务问题--在包含承诺的服务中返回数组,javascript,angularjs,Javascript,Angularjs,正如你所看到的,这是我第一次尝试这样做,我似乎做得不对。我只想获取一些由承诺和http请求组成的代码,并在控制器使用它之前将其放入服务中。我的目标是简单地清理控制器,使其不包含所有这些代码 在控制器的最后一步中记录后,对象显示为未定义。此外,所有请求都已成功发出。因此,它可以顺利地跳过所有的障碍,所以我猜它一定不会在服务中返回任何值,并且不会将任何内容传递给控制器中的后续函数。履行承诺后,我如何返回服务中的“人员”阵列 var myApp = angular.module('myApp', []

正如你所看到的,这是我第一次尝试这样做,我似乎做得不对。我只想获取一些由承诺和http请求组成的代码,并在控制器使用它之前将其放入服务中。我的目标是简单地清理控制器,使其不包含所有这些代码

在控制器的最后一步中记录后,对象显示为未定义。此外,所有请求都已成功发出。因此,它可以顺利地跳过所有的障碍,所以我猜它一定不会在服务中返回任何值,并且不会将任何内容传递给控制器中的后续函数。履行承诺后,我如何返回服务中的“人员”阵列

var myApp = angular.module('myApp', []);

myApp.controller('AppCtrl', function ($scope, $http, dataService) {

    var getPeople = function () {
        return $http.get('/getpeople');
    };

    getPeople().then(function (response) {
            dataService.compilePeople(response)
        })
        .then(function (people) {
            console.log(people);
            $scope.people = people;
        });

});

myApp.service('dataService', function ($q, $http) {

    this.compilePeople = function (response) {
        var people = [];
        names = response.data;
        grandPromiseArray = [];

        names.forEach(function (index) {
            var name = index,
                count = $q.defer(),
                skills = [],
                urls = '/getskillsbyname/' + name,
                urlc = '/getcountbyname/' + name;

            grandPromiseArray.push(
                $q.all([$http.get(urls), $http.get(urlc)])
                    .then(function (response) {
                        people.push({
                            name: name,
                            skills: response[0].data,
                            count: response[1].data
                        });

                    })
            );

        });
        return $q.all(grandPromiseArray).then(function () {
            return people
        });
    }
});

您需要从
compilePeople()
返回承诺,以便将这些人传递到下一个
.then()
处理程序。如此接近;)


我想你从服务器而不是客户机处理所有逻辑,当你调用许多ajax服务时,总是不能通过asyncronus调用得到你想要的最佳结果哪个对象是未定义的?compilePeople返回一个不能未定义的承诺。
getPeople()
    .then(function (response) {
        //You were missing this return
        return dataService.compilePeople(response)
    })
    .then(function (people) {
        console.log(people);
        $scope.people = people;
    });