0

In the below code , I loop through each domains and do some operations via jQuery GET function.The Loop is synchronous. How to make each loop wait 5 seconds before it perform next GET request.

 jsons = ["123.com","234.com","456.com"]


    jQuery.each(jsons, function(key,ele) {
    var maindomain = ele; 
    var apis= "https://api.panel.com/search?q="+maindomain;
    $.get(apis, function(source) { 

    if(source == "yes")
    {
    $.get("https://database.com/update.php?domain="+maindomain, function(response) { 
    console.log("successs");
    });
    }

    //SLEEP 5 seconds Here
    });
R.R.F
  • 41
  • 1
  • 9

1 Answers1

2

You could use .queue(), $.when() , setTimeout(), .dequeue()

var jsons = ["123.com","234.com","456.com"];

$({}).queue("requests", jsons.map(function(request) {
  return function(next) {
    // do ajax stuff
    $.get("https://api.panel.com/search?q=" + request)
    .then(function(source) {
       if (source === "yes")
       return $.get("https://database.com/update.php?domain=" + maindomain)
    })         
    .then(function() {
      // call `next` function after `5000ms` timeout
      setTimeout(next, 5000)
    })
  }
})).dequeue("requests")

var jsons = ["123.com","234.com","456.com"], res = [];

var fn = function(arg) {
  return $.Deferred(function(d) {
    d.resolve([arg, "success", {}])
  }).then(function(data) {
    res.push(data); return data
  })
}

$({}).queue("requests", jsons.map(function(request) {
  return function(next) {
    // do ajax stuff here
    fn(request).then(fn.bind(null, request))
    .then(function() {
      console.log(res)
      // call `next` function after `5000ms` timeout
      setTimeout(next, 5000)
    })
  }
})).dequeue("requests")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
guest271314
  • 1
  • 15
  • 104
  • 177