Javascript angular.forEach解析嵌套承诺
检索数据集合后,我必须进行连续的AJAX调用。我在解决嵌套承诺时遇到问题 基本上,我需要使用Javascript angular.forEach解析嵌套承诺,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,检索数据集合后,我必须进行连续的AJAX调用。我在解决嵌套承诺时遇到问题 基本上,我需要使用ActionItems属性扩展第一个集合中返回的每个对象,并使用承诺设置其值,然后解析集合中的每个承诺 任何帮助都将不胜感激 工厂 $http.get(urlBase + 'Project?$expand=Plant,CreatedBy,ModifiedBy,Plant/Contacts').then(function(success){ var contents = {};
ActionItems
属性扩展第一个集合中返回的每个对象,并使用承诺设置其值,然后解析集合中的每个承诺
任何帮助都将不胜感激
工厂
$http.get(urlBase + 'Project?$expand=Plant,CreatedBy,ModifiedBy,Plant/Contacts').then(function(success){
var contents = {};
contents = success.data.d.results;
return contents;
})
.then(function(contents){
var contentPromises = [];
angular.forEach(contents, function(content) {
contentPromises.push(
$http.get(urlBase + "ActionItems?$filter=ProjectId eq " + content.Id ).then(function(success){
content['ActionItems'] = success.data.d.results;
})
);
});
return $q.all(contentPromises).then(function() {
return contents;
});
});
当前输出未定义您的问题在
$http.get(…).then()部分中
对于,则告诉我们“此方法返回一个新的承诺,该承诺通过successCallback的返回值errorCallback被解析或拒绝”。
因此,.then
返回的承诺与$http.get
返回的承诺不同。你有责任解决或拒绝它(通过返回)!返回的承诺。然后
就是推送到contentPromises
的承诺
因此,你需要这样的东西:
angular.forEach(contents, function(content) {
contentPromises.push(
$http.get(urlBase + "ActionItems?$filter=ProjectId eq " + content.Id ).then(function(success){
content['ActionItems'] = success.data.d.results;
return success;
})
);
});
您最好也实现errorCallback
。事实证明,这种方法是有效的,但是返回数据的关键是
//Forgot the return below...
return $http.get(urlBase + 'Project?$expand=Plant,CreatedBy,ModifiedBy,Plant/Contacts').then(function(success){
var contents = {};
contents = success.data.d.results;
return contents;
})
.then(function(contents){
var contentPromises = [];
angular.forEach(contents, function(content) {
contentPromises.push(
$http.get(urlBase + "ActionItems?$filter=ProjectId eq " + content.Id ).then(function(success){
content['ActionItems'] = success.data.d.results;
})
);
});
return $q.all(contentPromises).then(function() {
return contents;
});
});
感谢所有帮助您的人。还有什么不适用于您的代码?它使用内容上的.map
返回未定义的考虑因素。