AngularJS。执行长时间运行的任务
问题描述:
AngularJS有一些执行长时间运行任务的机制吗?例如,GWT具有这样的功能:AngularJS。执行长时间运行的任务
有时您想分解您的逻辑循环,以便事件循环有机会在两段代码之间运行。 GWT中的 调度程序类将允许您这样做。 传递给调度程序的逻辑将在将来的某个时间点运行,此时控制 已返回到JavaScript事件循环。这个小的延迟可能会给接口一个机会来处理一些用户事件或初始化其他代码。
答
在JavaScript中,你通过强制的代码异步执行此操作:
setTimeout(function() {
// ... code executed at some later point in time
}, 0); // timeout of `0` means it will get executed as soon as possible
在AngularJS,你会用$timeout
服务,然后很容易地在单元测试嘲笑做到这一点。
为了给你一个完整的例子:
var maxIterations = 100000;
(function brokenUpFn (i) {
if (i >= maxIterations) {
return;
}
do {
// ... (some computation-intensive code here)
i++;
} while (i % 100);
setTimeout(brokenUpFn, 0, i);
})(0);
答
JavaScript的历史从一个重要的限制遭遇:其所有的执行过程中仍然是一个独特的线程中。
您可以尝试使用setTimeout()
和setInterval()
方法尝试模拟并行任务。由于XMLHttpRequest
对象可避免在从远程服务器加载资源时冻结UI,因此HTTP请求也可以异步方式完成。
Web Workers API定义了一种在后台运行脚本的方法。然后,您可以在主页外部的线程中执行一些任务。