javascript - Angular : immediately return from ngClick function

标签 javascript angularjs promise

我的页面上有一个下拉菜单,它实际上只是一个无序列表,其中每个菜单项如下所示:

<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/

相关文章:

javascript - Vuejs 将选项传递给组件

javascript - 如何在 http 调用成功时禁用 anchor 标记

javascript - 在 angularjs 中解析非 $q promise 后自动应用 $scope 更改(触发摘要)

javascript - 使用 ngRepeat 在 Angular 中进行分组验证

javascript - 在成功的 AJAX 调用后修改传递给 jQuery done() 回调的参数

javascript - 如何将输出简化为每个副本只有一个值

javascript - JSON响应上的重复 block

Angularjs 路由参数不起作用

javascript - 如何等待另一个 promise 填充的数组

javascript - 处理 React Redux 应用程序中的异步错误