AngularJS是否有一些执行长时间运行任务的机制?例如,GWT具有如下特征:
有时你想要分解你的逻辑循环以便JavaScript 事件循环有机会在两段代码之间运行。该 GWT中的调度程序类将允许您这样做。你的逻辑 传递给Scheduler将在以后的某个时刻运行,在控制之后 已经返回到JavaScript事件循环。这可能有点延迟 为界面提供处理某些用户事件或初始化的机会 其他代码。
答案 0 :(得分:2)
在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);
答案 1 :(得分:1)
JavaScript历来遭受一个重要的限制:它的所有执行过程都保留在一个独特的线程中。
您可以尝试使用setTimeout()
和setInterval()
方法模拟并行任务。由于XMLHttpRequest
对象可以避免在从远程服务器加载资源时冻结UI,因此HTTP请求也可以以异步方式完成。
Web Workers API定义了在后台运行脚本的方法。然后,您可以在主页外部的线程中执行某些任务。