首页 > 解决方案 > 为什么 Angular 在一个实例和另一个实例中自动调用 setTimeout?

问题描述

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

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

我在创建 iframe 之前使用 Performance API 进行了测试,以防问题出在我的代码中,但测试的代码在 < 100 毫秒内完成,所以这似乎不是问题。这不是网络问题,因为请求发生得很快。此外,两个应用程序都引用同一个实例,因此唯一的区别是它集成到的应用程序。

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

标签: javascriptangularjsangular

解决方案


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

我遇到了同样的情况,不仅大多数框架setTimeout()的角度有所不同。

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

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

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

如果可能,请分享代码片段


推荐阅读