SetTimeout 递归函数(Javascript)超出最大调用堆栈大小[重复]

2023-12-11

我有一个递归 SetTimeout 函数,可以在加载过滤器后单击页面上的过滤器(它们是通过 Ajax 加载的,因此在页面加载时无法立即使用)。

$scope.clickFilter = function () {
    var filter = $('.filter-item')
        .find('input[value="' + $scope.activeFilter + '"]');

    if (filter.length < 1) {
        setTimeout($scope.clickFilter(), 1000);
    } else {
        $(filter).trigger("click");
    }
}

但是,当过滤器需要很长时间才能加载时,我会收到“Uncaught RangeError:超出最大调用堆栈大小(...)”

我如何防止这种情况并确保它运行直到完成?


问题就在这里:

  setTimeout($scope.clickFilter(), 1000); 

Putting ()在函数引用之后意味着您希望该函数是called,立即,在代码中的该点。你可能想要的是这样的:

  setTimeout($scope.clickFilter.bind($scope), 1000);

这将

  • 将函数引用传递给setTimeout(),按要求,并且
  • 确保以正确的方式调用该函数this值(什么.bind()部分确实)

一旦你让它工作起来,术语“递归”就不太合适了。是的,函数在定时器到期后安排调用时正在引用自身,但它不是直接调用自身;它要求其他东西(计时器机制)稍后调用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SetTimeout 递归函数(Javascript)超出最大调用堆栈大小[重复] 的相关文章

随机推荐

  • 如何从Iphone调用wcf服务

    我想开发一个系统 Iphone应用程序可以通过wcf服务访问我的数据库 我是新的 wcf 服务 我想知道我应该制作哪个服务 休息或 以及为什么它们相互通信 WCF 服务的核心是 SOAP Web 服务 因此您应该能够使用 iPhone SO
  • Android:以编程方式获取设备名称

    这就是我尝试过的 mTextView setText MODEL android os Build MODEL nDEVICE android os Build DEVICE nBRAND android os Build BRAND nD
  • 当 Next.js 中的路由处于活动状态时定位活动链接

    如何像我们在 React Router 4 中那样定位 Next js 中的活动链接 意思是 当活动链路的路由处于活动状态时 为活动链路指定一个类别 一个简单的解决方案基于useRouter hook import Link from ne
  • 如何使用 jQuery ajax 调用 PHP 函数?

    我有一个名为 myfunctions php 的文件 其中有很多函数 例如 function sendForm save form function fn2 do something Other functions 和 jquery 代码
  • 两个连续的 [NSDate date] 总是会返回不同的时间吗?

    dateS 和 date 总是不同吗 Two NSDate date following each other NSDate dateA NSDate date Line X NSDate dateB NSDate date Line X
  • 最后手段的性能优化策略[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 该网站上已经有很多性能问题 但我发现几乎所有问题都非常针对具体问题并且相当狭窄 并且几乎都重复了避免过早优化的建议 我们假设 代码已经可以正常工作了 所选择的算法对于问题的情况来
  • Java:枚举与整数

    在 Java 中使用标志时 我看到了两种主要方法 其中一个使用 int 值和一行 if else 语句 另一种是使用枚举和大小写切换语句 我想知道使用枚举与整数作为标志在内存使用和速度方面是否存在差异 Both ints and enums
  • C# 使用 varbinary 调整 jpg 图像大小,转换为字节并保存到数据库中

    我正在尝试调整使用 FileUpload 控件上传的 jpg 图像的大小 并将其转换为字节 然后将其保存到数据库 SQL Server 2008 作为 varbinary MAX 我所做的和下面显示的代码是我设法将其转换为字节并以 varb
  • 使用单词边界时如何忽略特殊字符

    s sopa sop sopaa sopii 如何忽略 使用单词边界时 re sub r b sop b sopa s 输出 sopa sop sopaa sopii 看来你想要这样的东西 gt gt gt s sopa sop sopaa
  • 允许在Excel中显示超过15位数字

    我正在编写一个简单的 VBA Excel 脚本 我遇到了一些问题 因为我使用这种方式删除了数字的科学格式 Columns b ad NumberFormat 0 但后来我意识到其中一列有 23 位数字 比 15 位数字长 因为我需要在 Ex
  • 验证日期时如何在jqgrid中使用monthNames?

    在我的 jqgrid 中 当我单击 添加新记录 时 我的日期字段已预先填充当前日期 日期的格式为 yyyy MMM d 例如 2010 Jan 23 日期是必填字段 当我单击提交按钮时 它验证失败并显示错误 表明该日期无效 并且需要 Y m
  • 如果现场评估失败,如何保持在同一选项卡上

    我有主页选项卡和验证选项卡 我喜欢验证用户输入 如果用户输入有效 则切换回主页选项卡 否则留在验证选项卡上 此时 在我单击提交按钮后 即使用户输入无效 它也会切换回主页选项卡 索引 xhtml
  • REGEX 用逗号分隔的唯一数字

    我正在尝试验证以逗号分隔的数字 1 31 的唯一列表 不重复 i e 2 4 6 7 1 是有效输入 2 2 6无效 2有效 2 无效 1 2 3 4 15 6 7 31有效 1 2 3 4 15 6 7 32 无效 20 15 3 I t
  • 连接设备列表中的闪烁选项不允许我调试任何应用程序

    我有一个奇怪的问题 当我尝试在连接的设备中部署应用程序时 我有一个闪烁的选项 出现一秒钟 然后消失 然后再次出现 依此类推 当我尝试在任何连接的或虚拟设备中调试应用程序时 我收到此错误 01 23 18 49 36 Launching ap
  • 用户注册时自动创建个人资料 (Laravel 5)

    我正在尝试为我的注册用户创建一个个人资料页面 在此页面上 将显示身份验证 用户数据 姓名 电子邮件 还会显示额外的个人资料信息 城市 国家 地区 电话号码等 我已经建立了一对一的关系 但我遇到了一个问题 创建用户后 我想自动为该特定用户创建
  • Apache websocket 重定向到 Tomcat:mod_proxy 和 mod_proxy_wstunnel

    我正在尝试使用 mod proxy 和 mod proxy wstunnel 模块将流量从 Apache 重定向到 Tomcat HTTP 流量重定向没有问题 但我无法使用迄今为止尝试过的任何配置成功重定向 websocket 流量 我正在
  • 从 Python 调用并执行 r 脚本

    我正在尝试使用此 Python 脚本来调用 r 脚本并运行它 r 脚本是 dbc2csv r 其代码位于 Python 块下方 我设法调用 r 脚本并打开 R studio 但代码没有像我希望的那样自动运行 我的感觉是有什么问题subpro
  • 滚动位置时显示 Div

    首先我想参考这个网站 http annasafroncik it 我喜欢动画进入视野的方式 在 jquery 中创建类似的函数很难吗 有没有什么插件可以实现这样的效果 希望有人能帮助我 基本上 您想要为每个要隐藏的元素添加一个 hideme
  • 有没有办法获得“numpy.linalg.svd()”代码

    由于 numpy linalg svd 是一个预定义函数 我没有找到它的内部代码 from scipy import linalg u s v np linalg svd b full matrices True import inspec
  • SetTimeout 递归函数(Javascript)超出最大调用堆栈大小[重复]

    这个问题在这里已经有答案了 我有一个递归 SetTimeout 函数 可以在加载过滤器后单击页面上的过滤器 它们是通过 Ajax 加载的 因此在页面加载时无法立即使用 scope clickFilter function var filte