如何杀死一个javascript函数?

2023-12-19

示例代码:

var isExecutionOver = false,
    myFunction = function() {
      // does some asynchronous stuff and sets isExecutionOver to true
      // when the asynchronous job is over.
    };

myFunction();

// Kill myFunction if it takes more than 3 seconds
setTimeout(function() {
  if(!isExecutionOver) {
    // How do I kill myFunction?
  }
}, 3*1000);

在上面的代码片段中,我试图杀死(或者换句话说,停止执行)myFunction如果它无法在给定时间内(本例中为 3 秒)完成其工作。

PS:请假设我无法控制 myFunction 定义。我唯一可以工作的地方就是里面setTimeout.


你有一个非常复杂的问题:

  • 您实际上无法终止正在运行的函数。有时您可以设置一个标志,以便它在决定检查时可以注意到。它可以停止正在做的事情并返回。

    但请记住 JavaScript 是一种单线程语言。当此函数中的代码运行时,任何其他代码几乎没有办法设置该标志。

    示例 1:我似乎记得一些浏览器如何在弹出警报框时让某些事件从事件队列中运行。这些事件可能会树立标志。

    示例 2:另一种可能性是函数中的代码从技术上讲并不在函数中,但函数启动了一个完成工作的间隔计时器。任何其他代码都可以设置该标志,并且定期运行的代码可以检查该标志并停止重复。

    var abortWork = false;
    function a() {
        while (notDone) {
            .. do some work ...
            if (abortWork) {
                return;
            }
        }
    }
    ... whatever ...
    abortWork = true;
    
  • 你可以停止一个setTimeout()等待时间结束的事件。 (有类似的方法可以停止setInterval()重复的事件。

    var t = setTimeout(function() {
            ... code goes here ...
        }, 20000);
    ... whatever ...
    clearTimeout(t); // stop the timeout if it hasn't started running the function
    
  • 您可以停止正在等待响应的 ajax 请求。 (注意:纯 javascript ajax 调用也会返回 XHR 对象。)请注意,请求已经发送到服务器,这只是告诉服务器忽略将来对该请求的任何响应。

    var xhr = $.ajax({ type: "POST", ... });
    ... whatever ...
    xhr.abort(); //kill the request
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何杀死一个javascript函数? 的相关文章

随机推荐

  • python 仅使用 urllib2 获取标头

    我必须使用 urllib2 实现一个仅获取标头的函数 不执行 GET 或 POST 这是我的功能 def getheadersonly url redirections True if not redirections class MyHT
  • Windows 10 下多核处理器上的 QueryPerformanceCounter 行为不稳定

    在 Windows 下 我的应用程序使用QueryPerformanceCounter and QueryPerformanceFrequency 来执行 高分辨率 时间戳 自 Windows 10 以来 到目前为止仅在 Intel i7
  • 如何在 Julia/JuMP 中以总和表示法“for all”

    我正在尝试使用 JuMP 对 Julia 中的线性优化问题添加约束 我正在使用sum 但是 我在某些限制方面遇到了麻烦 有谁知道JuMP中的 for all 倒过来的A 怎么写 这是我到目前为止的代码 using JuMP m Model
  • 如何将 EditText 和 Button 放在一起?

    我想尝试让 EditText 和 Button 彼此相邻 我目前的位置是按钮位于右侧 编辑文本左对齐 但按钮显示它位于 EditText 的顶部 我希望按钮从 EditText 结束的地方开始 这就是我现在所拥有的
  • 根据上游任务的输出在气流中生成动态任务

    如何根据上游任务返回的列表动态生成任务 我已经尝试过以下方法 使用外部文件从列表中写入和读取 此选项有效 但我正在寻找更优雅的解决方案 Xcom 拉进了一家 subdag 工厂 这是行不通的 我能够将列表从上游任务传递到子dag 但 xco
  • 使用dompdf访问远程图像的安全问题

    我正在使用 dompdf 生成 PDF 文件 该文件从 highcharts js 导出库获取一些图像 动态图表 现在我必须将 DOMPDF ENABLE REMOTE 的默认设置从 false 更改为 true 以使 dompdf 能够包
  • 多个方法参数上的 @Cacheable 键

    来自弹簧文档 http static springsource org spring docs 3 1 0 M1 spring framework reference html cache html Cacheable value book
  • 如何在没有响应标头的情况下显式终止来自服务器的 http 连接

    我正在为我的一个客户端应用程序开发一个服务器模拟器 我正在使用 GlassFish 服务器 我必须在我的服务器应用程序中模拟 http 连接终止条件 有没有一种方法可以显式终止来自服务器端的连接 以便客户端不会收到任何响应标头 目前我已经尝
  • sudo pip 安装 django

    这是我第一次尝试安装 Django 当我运行它时 它成功安装了 Django 1 7 3 但我收到了下面的这些警告 我无法在网上找到任何有关它的信息 所以我希望有人能够澄清它们的含义 如果我需要修复它们 以及我该如何去做 谢谢 下面是我的终
  • 如何在 SwiftUI 中添加键盘工具栏,即使键盘不可见,该工具栏仍然保留

    我有一个聊天应用程序 想要在键盘上添加一个工具栏 类似于 SwiftUI 之前的 inputAccessoryView 我知道 iOS15 现在可以选择使用以下内容添加工具栏 来自 hackingwithswift toolbar Tool
  • bash:截断文件名,保持它们唯一

    我使用类似于此的 for 循环将文件夹中的所有文件名截断为 16 个字符 for i in do Shortname i 0 16 Let s assume I don t need the extension mv i Shortname
  • Playwright C# - 处理 Toast 消息

    我试图使用剧作家检查祝酒消息的内容 但找不到合适的方法来实现这一目标 剧作家文档列出了一种处理警报消息的合适方法 我可以使用该方法在解除警报之前检索警报中的文本内容 例如 Page Dialog dialog gt alertMessage
  • 图发生率列表实现

    我正在考虑图形数据结构实现 并正在查看 发生率列表 表示 这里有一个简单的描述 发生率列表 http en wikipedia org wiki Incidence list 因此图中的每个顶点都存储它所关联的边的列表 鉴于我的图是有向图
  • 使用 std::cout 正确地用零填充负整数

    我发现这个问题已经被问过 但每个人给出的答案都是 std cout lt lt std setw 5 lt lt std setfill 0 lt lt value lt lt std endl 这对于正数来说很好 但是对于 5 它会打印
  • 我可以在 Kubernetes Pod 中运行 Google Monitoring Agent 吗?

    看来谷歌监控代理 供电堆栈驱动程序 https cloud google com monitoring agent install agent应安装在每个Node 即每个计算实例 即每台机器 库伯内斯簇 然而新的plugins like N
  • 如何在 OAuth 同意屏幕中启用内部选项?

    当我尝试在 OAuth 同意屏幕中选择 内部 选项时 它告诉我 因为您不是G Suite用户 所以您只能制作您的应用 可供外部 一般受众 用户使用 我怎样才能启用这个选项 制作内部应用程序的唯一方法是从 gsuite 域帐户创建项目 通过您
  • 创建在 Aurelia 中使用依赖注入的类的新实例

    我想创建一个能够创建使用依赖注入的类 MyClass 实现抽象类 的新实例的工厂 我希望工厂看起来像这样 Factory export class Factory public static makeMyClass return new M
  • 导入错误:没有名为flask_wtf的模块

    我收到错误 ImportError No module named flask wtf 我尝试了所有可能的解决方案 我使用 安装了flask wrf flask bin pip install flask wtf Requirement a
  • Plotly:从悬停标签中隐藏“null”

    我有一个名为my customdata其中有一些nan价值观 当我绘制旭日图并将列表传递给customdata 它会根据需要显示值 但对于nan值 它反而显示0 如果我将 si 前缀设置与自定义数据一起传递 或null如果我没有传递自定义
  • 如何杀死一个javascript函数?

    示例代码 var isExecutionOver false myFunction function does some asynchronous stuff and sets isExecutionOver to true when th