Angular.js ng指令中的几个函数不会异步(并发)执行



我有几个函数附加到ng-click指令。第一个函数过滤项目列表,是一个指令范围函数,而第二个方法过滤并在地图上放置标记,它是控制器的方法。问题是来自控制器的第二个方法执行大约 2 秒并阻止第一个作用域函数的执行。代码示例:

<li ng-click="setFilter('favorite'); map.citiesFilter({favorite : true});">Best cities</li>

此方法来自控制器

map.citiesFilter({favorite : true});

执行 2 秒并阻止范围函数

setFilter('favorite');

我是否做错了,或者有没有办法异步执行此功能,以便用户不会等到控制器中的繁重地图过滤器方法结束执行。

我认为您将异步与并发混淆。

Web 浏览器只允许每个选项卡执行一个线程/进程。这个线程/进程要么服务于javascript代码,要么服务于浏览器渲染,因此当你的javascript执行时,它会阻止任何其他javascript运行和浏览器重新渲染

这意味着在执行所有阻塞代码之前,角度摘要循环不会运行。

关于javascript

的另一个重要事情是,一旦javascript代码设置为执行,它就会运行直到完成。由于没有调度程序,因此没有其他 javscript 有机会执行。使用 $interval、$timeout 和 $http 服务可能看起来并发,但实际上它们只是延迟更多的阻塞 JavaScript 代码,直到所有其他阻塞 JavaScript 代码完全执行。

最新更新