AngularJS。执行长时间运行的任务

时间:2014-11-25 12:36:39

标签: javascript angularjs

AngularJS是否有一些执行长时间运行任务的机制?例如,GWT具有如下特征:

  

有时你想要分解你的逻辑循环以便JavaScript   事件循环有机会在两段代码之间运行。该   GWT中的调度程序类将允许您这样做。你的逻辑   传递给Scheduler将在以后的某个时刻运行,在控制之后   已经返回到JavaScript事件循环。这可能有点延迟   为界面提供处理某些用户事件或初始化的机会   其他代码。

2 个答案:

答案 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定义了在后台运行脚本的方法。然后,您可以在主页外部的线程中执行某些任务。

看看这个article和此example 请注意,只有新浏览器support此功能