首页 > 求教关于For循环中执行ajax请求的问题

求教关于For循环中执行ajax请求的问题

var result = [];
for(var i = 0 ; i < result.length; i++){

  send(result[i]);
  //如何保证在第一条数据发送成功后再继续循环发送下一条数据呢?(不用jQuery)

}

function send(obj){

 $http({
    method: "POST",
    url: "url",
    data: postdata,
    timeout: 1000
    })
    .success(function(data) {
       
    })
    .error(function(data) {
      
    })
    .finally(function() {
       
    });

}


ajax是异步的,可以使用递归代替循环
在请求成功的回调函数中递归调用请求函数就行了


var result = [1, 2, 3, 4];

httpArray(send, result);

function httpArray(fn, result) {
  var len = result.length;
  exec(fn, len);
  function exec(fn, l) {
    return fn(result[len - l]).then(function () {
      if (l <= 1) return;
      return exec(fn, --l);
    });
  }
}

function send(obj) {
  return $http({
    method: "POST",
    url: "url",
    data: postdata,
    timeout: 1000
  })
    .success(function (data) {

    })
    .error(function (data) {

    })
    .finally(function () {

    });
}

ajax加上参数async: false,改成同步应该就可以了


function send(obj) {
 if (obj > result.length) return false;
 $http({
    method: "POST",
    url: "url",
    data: postdata,
    timeout: 1000
    })
    .success(function(data) {
       obj++;
       send(obj);
    })
    .error(function(data) {
      
    })
    .finally(function() {
       
    });
}
send(0);
var Request = (i) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
           console.log(i)
           resolve(i+"完成")
        }, 1000)
    })
}
Request(1)
.then((s) => Request(2))
.then((s) => Request(3))
.then((s) => Request(4))
【热门文章】
【热门文章】