为什么Angular会在一个实例中自动调用setTimeout而不是另一个实例?

发布时间:2020-07-07 16:38

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

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

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

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

回答1

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

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

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

setTimeout()设置为在特定时间后执行,但是线程无法保证。 一段时间后,完成更改检测和观察者生命周期的工作,都与setTimeout()交织在一起,您将最终得到奇怪的行为。

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

请尽可能共享代码段