如何在循环中订购相同的ajax调用?

时间:2016-09-02 18:48:37

标签: angularjs ajax

我使用以下代码从后端获取一些信息:

angular.forEach(authors, function(author){
            var authorId = author.id;
            var url = contextPath + '/book/list/' + authorId;
            $http({
                method: 'GET',
                url: url
            })
            .then(function(response){
                author.books = response.data;
            })
        });

我想逐个触发ajax调用,而不是同时触发,这意味着每个ajax调用都会等待前一个调用完成。有人知道我的代码会有什么变化吗?

2 个答案:

答案 0 :(得分:0)

是的,您可以在角度中使用 $ timeout 服务按顺序拨打电话,如下所示

angular.forEach(authors, function(author){
        var authorId = author.id;
        var url = contextPath + '/book/list/' + authorId;
        $timeout(function(){
        $http({
            method: 'GET',
            url: url
        })
        .then(function(response){
            author.books = response.data;
        })
    })},2000);//2000-> milliseconds; 

这会每2秒发出 GET 请求。如果您知道您的呼叫将需要更多时间根据需要设置超时值。

答案 1 :(得分:-1)

查看$q.all()

  

将多个promises组合成一个promise,当所有输入promise都被解析时解析。

编辑: 哎呀,没读完。 $ q.all()等待所有承诺解决,你需要将它们链接起来,以便在一个承诺解决后再调用另一个:

        somepromise
        .then(function(response){
            return $http({method:"some method",url:"some urlj",data:response});
        }).then(function(response2){
           //chain third and so on
        })

基本上你需要返回承诺才能链接它们