jQuery $ .each with $ .wait

时间:2017-04-14 07:11:16

标签: javascript jquery

我的尝试中,有太多的API请求导致我自己接受临时API禁令。以下是我正在做的事情:

$.each(api_field, function(index, sector ) {
    "use strict";
    $.each(sector, function( key, values) {
        $.getJSON("URL", function(result){
            $.each(result, function(i, field){
                $("body").append(field + " ");
            });
        });
    });
});

我的脚本运行62个URL,每个API请求需要休眠1-5秒。如何使用jQuery .wait()函数不仅仅在几秒钟内请求所有数据?

注意:我的脚本完全正常工作,我只需要为每个请求添加一个延迟。

3 个答案:

答案 0 :(得分:2)

我在过去的项目中已经遇到过这种情况。 我使用.delay()来延迟迭代过程。

如果您使用.delay()

$.each(api_field, function(index, sector ) {
    "use strict";
    $.each(sector, function( key, values) {
        $.getJSON("URL", function(result){
            $.each(result, function(i, field){

                $("body").delay(5000*i).queue(function(next){
                    $(this)..append(field + " ");
                    next();
                });

            });
        });
    });
});

将时间更改为您想要的时间1000 = 1s

答案 1 :(得分:2)

你不需要jQuery。使用setTimeout

var i = 0;
$.each(api_field, function (index, sector) {
    "use strict";
    $.each(sector, function (key, values) {
      i++;
      setTimeout(function () {           
        $.getJSON("URL", function (result) {
          $.each(result, function (i, field) {
            $("body").append(field + " ");
          });
        });
      }, 1000 * i); // Or 5000
    });
  });

答案 2 :(得分:0)

您可以使用setTimeout进行延迟:

setTimeout(function(){
    $.getJSON("URL", function(result){
        $.each(result, function(i, field){
            $("body").append(field + " ");
        });
     });
},1000*index);//<---index from outermost each.

每次迭代会延迟一秒钟。