Javascript angular.forEach解析嵌套承诺

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 = {};

检索数据集合后,我必须进行连续的AJAX调用。我在解决嵌套承诺时遇到问题

基本上,我需要使用
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
返回未定义的考虑因素。