AngularJs。使用 $q.all 发送多个 post 请求

AngularJs. Using $q.all for sending multiple post requests

我有一个 AngularJs 应用程序,我需要在其中循环调用 $http post。这是我的代码:

          var promisesArray = [];
          for(i = 0; i < 28; i++) {
                 promisesArray.push($http({
                    method: "post",
                    url: "/studentanswers",
                    data: {
                        studentName: "abc",
                        answerImage: "sdf",
                        questionPrompt: 1
                    }
                }));
          }
          $q.all(promisesArray).then(function(data){
              console.log("success!!!!");
          });

出于某种原因,它没有post收集集合中的所有项目。我知道浏览器通常不允许超过 6 个异步 post 调用。据我了解, $q.all 是一种解决方法。此外,即使我注释掉 $q.all 部分,也没关系,因为 post 调用仍然会执行。

如有任何帮助,我将不胜感激!

请注意 $q.all 没有弹性 。它将以第一个被拒绝的承诺终止。但这真的不是你的问题。

您需要链接您的帖子以避免浏览器同时发布帖子的限制。

var promisesList = [];
var promiseMinusOne = $q.when();

for (var i = 0; i < 28; i++) {
    //begin IIFE closure
    function(i) {
        //chain off promiseMinusOne
        var httpPromise = 
             promiseMinusOne.catch (function (e) {
                 return e;
             }) .then (function (r) {
                 return $http({ method: "post",
                                url: "/studentanswers",
                                data: answerList[i]
                 })
             });
        promisesList.push(httpPromise);
        promiseMinusOne = httpPromise; 
    }(i);
    //end IIFE closure
};

var chainablePromise = 
    promiseMinusOne.catch (function (e) {
        return (e);
    }) .then (function (r) {
        //process the promisesList
    });

请注意,对于 promiseMinusOne,使用 .catchreturn 以便在其中一项被拒绝时继续列表。