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

时间:2014-12-03 21:09:08

标签: angularjs angularjs-directive angularjs-scope

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

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

来自控制器的此方法

map.citiesFilter({favorite : true});

执行2秒并阻止范围功能

setFilter('favorite');

我做错了什么,或者有没有办法异步执行这个函数,这样用户就不会等到控制器的重大地图过滤方法结束执行。

1 个答案:

答案 0 :(得分:1)

我认为你同时异步地混淆了。

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

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

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