首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何依次执行父子请求

如何依次执行父子请求
EN

Stack Overflow用户
提问于 2017-07-17 17:26:23
回答 2查看 82关注 0票数 1

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

在谷歌搜索的过程中,我学会了如何使用$q

代码语言:javascript
运行
复制
    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) {
    })
};

这确保了https://parentrequest是按顺序执行的,但https://childrequest不是按顺序执行的。

这会将输出呈现为

代码语言:javascript
运行
复制
Parent #0
Parent #1
Parent #2
Parent #3
Parent #4

Child #0
Child #1
Child #3
Child #2
Child #4
Child #5

但是我希望执行的请求是

代码语言:javascript
运行
复制
Parent #0
Child #0
Parent #1
Child #1
Parent #2
Child #2
Parent #3
Child #3
Parent #4
Child #4
Parent #5
Child #5

接下来,我尝试了下面的方法,但它似乎仍然不能呈现

代码语言:javascript
运行
复制
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) {

});}
EN

回答 2

Stack Overflow用户

发布于 2017-07-17 17:40:32

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

试试这个:

代码语言:javascript
运行
复制
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);
}

// Update (添加一些条件):

代码语言:javascript
运行
复制
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);   
}
票数 1
EN

Stack Overflow用户

发布于 2017-07-17 18:45:29

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

代码语言:javascript
运行
复制
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);

工作演示http://jsfiddle.net/rmu6wuo8/1/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45140460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档