Angularjs 如何执行父级&;按顺序的子请求

Angularjs 如何执行父级&;按顺序的子请求,angularjs,ajax,angular-promise,Angularjs,Ajax,Angular Promise,如何将子请求添加到promise数组。我需要同步执行多个ajax请求 在谷歌上,我学会了如何使用$q function _SearchData() { var promises = []; var callbackFunc = function(data) { dataService.get("https://childrequest").then(function(data) { console.log('inner ' + i)

如何将子请求添加到promise数组。我需要同步执行多个ajax请求

在谷歌上,我学会了如何使用
$q

    function _SearchData() {
    var promises = [];
    var callbackFunc = function(data) {
        dataService.get("https://childrequest").then(function(data) {
            console.log('inner ' + i);
        });
    }
    for (var i = 0; i < 5; i++) {
        promises.push(dataService.get("https://parentrequest").then(callbackFunc));
    }
    $q.all(promises).then(function(done) {
    })
};
但我希望执行请求的是

Parent #0
Child #0
Parent #1
Child #1
Parent #2
Child #2
Parent #3
Child #3
Parent #4
Child #4
Parent #5
Child #5
接下来,我尝试了下面的方法,但它似乎仍然无法呈现

function _SearchData() {

var promises = [];

var callbackFunc = function(data) {
    utilService.test("https://parentrequeste").then(function(data) {
        if(data.entity == "Parent") //first check
        {
        console.log("outer  " + i);
         if(data.id > 0) // second check{
        utilService.get("https://childrequest").then(function(data) {
            console.log('inner ' + i);
         })
         }
         else 
         {
            utilService.create("https://childrequest").then(function(data) {
            console.log('inner ' + i);
          });
         }

         }});});}


for (var i = 0; i < 5; i++) {
    promises.push(callbackFunc);
}

$q.all(promises).then(function(done) {

});}
函数_SearchData(){
var承诺=[];
var callbackFunc=函数(数据){
utilService.test(“https://parentrequeste)然后(函数(数据){
if(data.entity==“Parent”)//第一次检查
{
控制台日志(“外部”+i);
if(data.id>0)//第二次检查{
utilService.get(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
})
}
其他的
{
utilService.create(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
});
}
}});});}
对于(变量i=0;i<5;i++){
承诺推送(callbackFunc);
}
$q.all(承诺)。然后(函数(完成){
});}

始终在每个promise回调函数中返回某些内容

试试这个:

function _SearchData() {
    var promises = [];
    for (var i = 0 ; i < 5; i++) {
        var p = dataService.get("https://parentrequest").then(function() {
            // A return here:
            return dataService.get("https://childrequest").then(function (data) {
                console.log('inner ' + i);
                return data;  // A return here
            });
        });
        promises.push(p);
    }
    return Promise.all(promises);
}
函数_SearchData(){
var承诺=[];
对于(变量i=0;i<5;i++){
var p=dataService.get(“https://parentrequest)然后(函数(){
//返回这里:
返回dataService.get(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
return data;//这里有一个return
});
});
承诺推送(p);
}
返回承诺。全部(承诺);
}
//更新(添加一些条件):

函数_SearchData(){
var承诺=[];
对于(var i=0;i<5;i++){
var p=utilService.test(“https://parentrequeste)然后(函数(数据){
如果(data.entity==“父级”){
控制台日志(“外部”+i);
如果(data.id>0){
返回utilService.get(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
返回数据;
})
}否则{
返回utilService.create(“https://childrequest)然后(函数(数据){
控制台日志('内部'+i);
返回数据;
});
}
}
返回null;
});
承诺推送(p);
}
返回承诺。全部(承诺);
}

您可以这样做以获得所需的输出模式

function callParent(i, n) {
    if (i > n) {
        return;
    }
    console.log("call" + i);
    parent().then(function() {
        callParent(++i, n);
    })
}

function child() {
    var defer = $q.defer();
    $http.get("https://childrequest").then(function(res1) {
        console.log("Got child data");
        defer.resolve("Got child data");
    })
    return defer.promise;
}

function parent() {
    var defer = $q.defer();
    $http.get("https://parentrequest").then(function(res1) {
        console.log("Got Parent data");
        child().then(function() {
            defer.resolve("Got Parent data");
        })
    })
    return defer.promise;
}
var n = 10;
callParent(1, n);

工作演示

如果我有一些情况,我应该把它放在哪里,请检查这个链接,否则{…return dataService.create(“(数据){我已经在帖子中添加了检查。你能检查并更新ans吗谢谢,伙计,我正在检查。同时,我对你的ans进行了升级:)
function _SearchData() {
    var promises = [];
    for (var i = 0 ; i < 5; i++) {  
        var p = utilService.test("https://parentrequeste").then(function(data) {
            if(data.entity == "Parent") {
                console.log("outer  " + i);
                if(data.id > 0) {
                    return utilService.get("https://childrequest").then(function(data) {
                        console.log('inner ' + i);
                        return data;
                    })
                } else {
                    return utilService.create("https://childrequest").then(function(data) {
                        console.log('inner ' + i);
                        return data;
                    });
                }
            }
            return null;
        });
        promises.push(p);
    }
    return Promise.all(promises);   
}
function callParent(i, n) {
    if (i > n) {
        return;
    }
    console.log("call" + i);
    parent().then(function() {
        callParent(++i, n);
    })
}

function child() {
    var defer = $q.defer();
    $http.get("https://childrequest").then(function(res1) {
        console.log("Got child data");
        defer.resolve("Got child data");
    })
    return defer.promise;
}

function parent() {
    var defer = $q.defer();
    $http.get("https://parentrequest").then(function(res1) {
        console.log("Got Parent data");
        child().then(function() {
            defer.resolve("Got Parent data");
        })
    })
    return defer.promise;
}
var n = 10;
callParent(1, n);