javascript - 事件停止重复

标签 javascript html ajax asynchronous recursion

我有一个包含以下 HTML 行的网络应用程序:

<select id="dropdown"; onchange="update()">

相关的JS是:

function update()
{
    val = document.getElementById("dropdown").value;
    arr = some_dict[val];
    CHUNK_SIZE = 1024;
    i = 0;

    function recursive_call()
    {
        data = arr.slice(CHUNK_SIZE*i, CHUNK_SIZE*i + CHUNK_SIZE);
        if (data.length < CHUNK_SIZE){return;}
        ...
        $.ajax({
            type: "POST",
            url: "/page",
            data: {"data": data},
            async: true,
            success: function (d){
                setTimeout(another_func, 3000);
                recursive_call();
            }
        })
        i++;
    }

}

本质上,每当选择新的下拉值时,我都会从数组中递归地提取连续的 block 并将它们发送到我的服务器。当数组长度小于 block 大小时,我返回,停止此过程。

问题是当选择新的下拉值并且递归不完整时。我想在选择新值时停止现有的重复循环,并开始重复与新值关联的新数组。

我已经尝试了一些方法,但是代码非常困惑,并且会进一步使我在这里描述的内容变得复杂。

最佳答案

这是使用间隔而不是递归的类似功能的示例。

这样做的好处是您可以使用 clearInterval 取消间隔

let intervalReference = null
let counter = 0

function update() {
   counter = 0
   if(intervalReference !== null){
        clearInterval(intervalReference)
   }
  
  intervalReference = setInterval(()=>{
  	counter++
  	console.log(counter)
        //do your ajax in here
  }, 1000)
}
<select id="dropdown" onchange="update()">
 <option value="a">A</option>
  <option value="b">B</option>
</select>

关于javascript - 事件停止重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61051952/

相关文章:

javascript - 点击不注册

javascript - 如何将 <ul> 与 html 一起复制到 jquery 中的另一个 <ul> 中?

javascript - 如何使引导导航栏背景透明淡入网页

php - AJAX 表单提交错误

javascript - 类中函数前的 "get"关键字是什么?

javascript - 检查 css 类是否存在并且可以应用

css - 带内容的工具提示

javascript - 从 JSON 获取数据无法与 jquery load 一起使用

javascript - 将 JSON 字符串转换为 JSON 对象,这样我就不需要更改基础 jquery.dataTables.js

javascript - 如何在使用 ng-options 时将所选选项的文本分配给另一个模型?