getJSON 请求循环遍历参数数组,每次调用之间都有延迟

getJSON requests looping through an array of parameters with delay between each call

本文关键字:调用 之间 延迟 循环 请求 遍历 参数 数组 getJSON      更新时间:2023-09-26

谁能帮助我理解为什么下面的jQuery/Javascript代码,而不是以每秒1的节奏节拍率运行,而是有这种级联雪崩般的ajax调用(慢到每秒很多)?

var i = 0, l = data.length;
function geocode() {
$.getJSON(
    'https://maps.googleapis.com/maps/api/geocode/json',
    {
        key: "xxxxx",
        sensor: false,
        address: data[i][3],
        region: 'gb'
    },
    function(d, textStatus, jqXHR) {
        if(d["status"] == "OK") {
            console.log(data[i][3]);
            console.log(d["results"][0]["geometry"]["location"]);
            i++;
            if(i < l) { window.setInterval(geocode, 1000); }
        }
    }
);
}
geocode();

在我的脑海中,这是这样流动的:

  1. 首次调用地理编码
  2. 发出 Ajax 请求
  3. 成功后(这是任意时间后),我阅读了结果
  4. 递增索引
  5. 如果我们尚未耗尽数组,请将另一个地理编码调用设置为在 1 秒后开始

供参考:"data"是英国邮政编码的嵌套数组,我正在尝试使用Google的地理编码API检索坐标。

您不断设置新的间隔,并且永远不会取消前一个间隔。您应该使用 clearInterval() 取消间隔或使用一次性setTimeout

如果使用间隔,

则在设置间隔时保存值:

var intervalId;
....
intervalId = setInterval(...);

然后

clearInterval(intervalId); 

当您需要新的间隔时。或者使用setTimeout()并根据要求重新签发。