Javascript 角度:立即从单击功能返回
我的页面上有一个下拉菜单,它实际上只是一个无序列表,其中每个菜单项看起来像:Javascript 角度:立即从单击功能返回,javascript,angularjs,promise,Javascript,Angularjs,Promise,我的页面上有一个下拉菜单,它实际上只是一个无序列表,其中每个菜单项看起来像: <li ng-click='doCalc(5)'>Five</li> 这意味着factorial运行时,菜单保持在屏幕上。我希望doCalc立即返回,而不是等待factorial完成运行 我知道如何做到这一点,没有延迟设置超时,并承诺但是做这件事的方法是什么呢?搜索“angular promise”会产生大量关于HTTP请求的结果,而我在这里只是做一个简单的计算。可以使用$q服务或$timeo
<li ng-click='doCalc(5)'>Five</li>
这意味着factorial
运行时,菜单保持在屏幕上。我希望doCalc
立即返回,而不是等待factorial
完成运行
我知道如何做到这一点,没有延迟设置超时,并承诺但是做这件事的方法是什么呢?搜索“angular promise”会产生大量关于HTTP请求的结果,而我在这里只是做一个简单的计算。可以使用
$q
服务或$timeout
服务创建承诺
function doCalc(num) {
return $q.when(factorial(num));
};
或
是否有一个或另一个偏好?如果我在页面中有很多异步请求,什么时候会被阻止
$q
服务和$timeout
服务都使用$q
队列(以及setTimeout
下面的队列)。请注意,浏览器队列和角度$q
队列都在单个线程上运行。这意味着,factorial
函数一旦启动,就会运行到完成。如果您担心阶乘
服务会导致其他非同步操作出现问题,那么该函数需要通过多次调用$q.when
或$timeout
(两者最终都调用setTimeout
)来分解。我认为您应该坚持setTimeout
,在使用$timeout
的方式中,是否有一个首选项?如果我在页面中也有很多异步请求,什么时候会被阻止?为什么要通过ng单击
函数返回承诺ng click
不需要任何值。将内容返回到函数使其更通用。OP可能会决定在其他上下文中使用该函数。关于您的编辑:所以我猜使用$q.when永远不会比使用$timeout更糟糕?我之所以这么问,是因为when
语法在我看来非常简洁。@SteveD在这种情况下,我会选择$q.when
。除非已经注入$timeout。这真的没什么大不了的。很高兴知道这两种方法都有效。
function doCalc(num) {
return $q.when(factorial(num));
};
function doCalc(num) {
return $timeout(function() {return factorial(num)}, 0);
};