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