我有一个承诺问题的foreach,承诺与angularjs
$scope.refreshProject = function() {
project.getAll().then(function(results) {
angular.forEach(results, function(project) {
project_path = project.path;
project_file = project.file;
project_id = project.id;
console.log(project);
console.log('http://' + project_path + '/' + project_file);
$http.get('http://' + project_path + '/' + project_file)
.then(function(res){
var project = new Project();
project.update(project_id, { 'content': res.data });
});
});
$scope.refresh();
});
};
我的$ http.get不工作,
的console.log(的 'http://' + project_path +'/'+ project_file);
回报
'http:///'
我的变量是空瓶。
project.model.js
Project.prototype.getAll = function() {
return ProjectService.getAll();
};
project.service.js
this.getAll = function (params) {
var projects = [];
return db.selectAll('projects').then(function(results) {
for(var i=0; i < results.rows.length; i++){
projects.push(results.rows.item(i));
}
return projects;
});
};
我怎么能执行我的$ HTTP请求时,我从project.path的PARAMS和project.file可以吗?
解决
project.getAll().then(function(results) {
angular.forEach(results, function(project) {
(function(project) {
var project_id = project.id;
if (project.path) {
var promise = $http.get(project.path + '/' + project.file)
.then(function(res){
var project = new Project();
console.log(res.data);
project.update(project_id, { 'content': res.data });
});
}
promises.push(promise);
})(project);
});
$q.all(promises).then(function() {
$scope.refresh();
console.log('refresh() ok');
});
});
使用'$ q.all'或'Promise.all' –
你是否检查'的console.log(结果)'?这是对的吗? – dfsq
在loop内部发送请求并不是个好主意。你的性能会很低,有时你的应用程序可能会崩溃,这就是为什么你需要在1个http请求中发送结果(作为数组) –