【发布时间】:2016-04-30 18:25:32
【问题描述】:
我的承诺有问题,
$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;
});
};
当我有来自 project.path 和 project.file 的参数正常时,我如何执行我的 $http 请求?
已解决
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(results)了吗?对吗? -
在循环内发送请求不是个好主意。您的性能会非常低,有时您的应用程序可能会崩溃,这就是为什么您需要在 1 个 http 请求中发送结果(作为数组)
标签: javascript angularjs angular-promise