Angularjs多个HTTP POST请求导致net :: ERR_INSUFFICIENT_RESOURCES

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angularjs多个HTTP POST请求导致net :: ERR_INSUFFICIENT_RESOURCES相关的知识,希望对你有一定的参考价值。

在我的应用程序中,我以textarea字段形式获取用户提供的主机列表,并使用HTTP POST to API将其插入到我的数据库中。

在我遇到net :: ERR_INSUFFICIENT_RESOURCES错误时,列表运行超过2.5k主机之前,一切正常。我读到它与Chrome的某些限制有关。

如何克服此限制?我试图将列表拆分为多个束,并在它们之间引入一些延迟,但它不起作用(似乎所有束都在同一时间异步启动)。

Controller:

AddHostsController.$inject = ['$scope', 'Authentication', 'App', 'Hosts', '$filter', '$timeout'];

function AddHostsController($scope, Authentication, App, Hosts, $filter, $timeout) {
    var vm = this;
    vm.submit = submit;
    ...some other staff...

    function submit() {
      var fulllist = [];
      vm.firstbunch = [];
      vm.secondbunch = [];
      fulllist = vm.host_list.split('\n');
      vm.firstbunch = fulllist.slice(0,1500);
      vm.secondbunch = fulllist.slice(1500,);

      $timeout(function() { vm.firstbunch.forEach(submitHost);}, 2000)
      .then(firstBunchSuccessFn, firstBunchErrorFn);

      function firstBunchSuccessFn(){
        vm.secondbunch.forEach(submitHost);
      }

      function firstBunchErrorFn(){
        console.log("Something went wrong!");
      }

      function submitHost(value, index, array){
        App.addhosts(...some args..., value).then(addHostsSuccessFn, addHostsErrorFn);

        function addHostsSuccessFn(response) {
        }

        function addHostsErrorFn(response) {
          console.error('Failure!');
        }
     }
}

服务:

.factory('App', App);

App.$inject = ['$http'];

function App($http) {
    var App = {
      addhosts: addhosts,
    };

    return App;

    function addhosts(...some other.., value) {

        return $http.post('/api/v1/hosts/', {
            ...some other...
            value: value
        });
    }
答案

而不是并行执行请求,将它们链接起来:

var configArr = [/* Array of config objects */];
var resultsArrPromise = configArr.reduce( reducerFn, $q.when([]) );

responseArrPromise
  .then(function (responseArr) {
    responseArr.forEach( response => console.log(response.data) );
}).catch(function (errorResponse) {
    console.log(errorResponse);
}); 

function reducerFn(acc, config) {
    var accArrPromise = acc.then(function(responseArr) {
        var httpPromise = $http(config);
        return $q.all( [...responseArr, httpPromise] );
    });
    return accArrPromise;
}

精简器以一个空数组的承诺开始。 reducer的每次迭代都将另一个HTTP承诺链接到响应数组。结果是一个承诺,可以解决一系列响应。通过链接HTTP请求,它们将顺序执行,而不是并行执行。

以上是关于Angularjs多个HTTP POST请求导致net :: ERR_INSUFFICIENT_RESOURCES的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 与 angularjs $http.post 请求

AngularJS - $http.post 发送请求参数而不是 JSON 的任何方式?

AngularJS:$http.post 使用 textarea 的多个值?

Angularjs 获取 OPTIONS 和 POST 请求

AngularJS $http POST withCredentials 失败,请求正文中有数据

AJAX 中的 Http POST 请求完美运行,但在 AngularJS 中却不行