【问题标题】:Why does Angular automatically invoke setTimeout in one instance vs. another?为什么 Angular 在一个实例和另一个实例中自动调用 setTimeout?
【发布时间】:2020-07-07 16:38:21
【问题描述】:

如果这听起来很奇怪,我深表歉意,但我会尽力描述正在发生的事情。我们获得了一项小型服务,该服务提供了一个单一表单 UI,我们通过事件捕获结果。我们已将其集成到两个应用程序中,当我们通过 iframe 在模态窗口中加载 UI 时,我们会看到一些不同的行为。当集成到一个 UI 中时,它会很快加载。但是,在其他 UI 中,加载需要几秒钟。现在,我能发现的唯一区别是 setTimeout 在模型创建后的几秒钟内被触发。我使用性能选项卡中的 Firefox 开发工具发现了这一点。

现在,我相信这个表单的 UI 是在非最新版本的 Angular (AngularJS?) 中构建的,它基于一些使用字符串的 Google 搜索,我可以在最小化的 polyfill.xxxx.js 文件中看到这些字符串。但是,我无法理解最小化的代码,也没有版本信息可以帮助我回到我可以尝试阅读和理解的版本。

我在创建 iframe 之前使用 Performance API 进行了测试,以防问题出在我的代码中,但测试的代码在

所以,我的主要问题是什么可能导致 Angular (AngularJs) 在页面加载时设置超时?我的第二个问题是尝试调试这个有什么建议?我根本不使用 Angular,所以我什至不确定在我已经尝试过的之外从哪里开始。我看到的唯一自定义应用程序代码看起来是 Angular 配置/属性,因此无需调试 JavaScript。

【问题讨论】:

    标签: javascript angularjs angular


    【解决方案1】:

    在这种情况下使用setTimeout() 的最佳建议是不要使用任何setTimeout()

    我遇到了同样的情况,不仅大多数框架对setTimeout() 的处理方式有所不同。

    我的意思是setTimeout() 在普通的 JS 应用和 angularJS 应用和 Angular 应用中的时间间隔会有所不同。

    setTimeout() 设置为在一定时间后执行,但这不是线程保证的。 某个时间角度完成更改检测和观察者生命周期,所有这些都与setTimeout() 混合在一起,您最终会出现奇怪的行为。

    所以最好不要使用它,除非你确定它不会与其他正在运行的东西混在一起。

    如果可能,请分享代码 sn-p

    【讨论】:

    • 在我看来,sn-p 的代码不多: 关于调用 setTimeout 的位置,我发现它的唯一地方是我在原始问题中提到的 polyfill 文件。不,在这种情况下我根本不会调用它。问题是我不知道它是什么/如何被调用的。
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多