如何在多 Jquery Get 函数中等待

How to wait inside multile Jquery Get Function

本文关键字:函数 等待 Get Jquery      更新时间:2023-09-26

在下面的代码中,我遍历每个域并通过jQuery GET函数做一些操作。循环是同步的。如何使每个循环在执行下一个 GET 请求之前等待 5 秒。

 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
    });
你可以

使用 .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>