我的页面上有一个下拉菜单,它实际上只是一个无序列表,其中每个菜单项如下所示:
<li ng-click='doCalc(5)'>Five</li>
现在,doCalc
调用的函数可能需要一些时间:
function doCalc(num) {
factorial(num);
}
这意味着在 factorial
运行时菜单保留在屏幕上。我想要的是 doCalc
立即返回,而不是等待 factorial
完成运行。
我知道如何通过无延迟 setTimeout 和 promise 来做到这一点。 但是 Angular 的方式是怎样做到这一点?搜索“Angular Promise”会产生大量有关 HTTP 请求的结果,而我在这里只是做了一个简单的计算。
最佳答案
可以使用 $q
服务或 $timeout
服务创建 Promise。
function doCalc(num) {
return $q.when(factorial(num));
};
或者
function doCalc(num) {
return $timeout(function() {return factorial(num)}, 0);
};
Is there a preference for one or the other? If I have lots of async requests also going on in the page, will when be blocked?
$q
服务和 $timeout
服务都使用 $q
队列(以及低于该 setTimeout
>)。请注意,浏览器队列和 Angular $q
队列都在单个线程上运行。这意味着一旦 factorial
函数启动,它就会运行到完成。如果您担心 factorial
服务会导致其他异步操作出现问题,则需要通过多次调用 $q.when
或 $ 来分解该函数timeout
(最终都会调用setTimeout
)。
关于javascript - Angular : immediately return from ngClick function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36519483/