Javascript 安格拉斯。执行长时间运行的任务

Javascript 安格拉斯。执行长时间运行的任务,javascript,angularjs,Javascript,Angularjs,AngularJS是否有执行长时间运行任务的机制?例如,GWT具有如下特性: 有时,您希望打破逻辑循环,以便JavaScript 事件循环有机会在两段代码之间运行。这个 GWT中的调度程序类将允许您这样做。你的逻辑 控制完成后,传递给调度程序将在将来的某个时间点运行 已返回到JavaScript事件循环。这个小小的耽搁可能会 给接口一个机会来处理一些用户事件或初始化 其他代码 在JavaScript中,可以通过强制异步执行代码来实现这一点: setTimeout(function () {

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

有时,您希望打破逻辑循环,以便JavaScript 事件循环有机会在两段代码之间运行。这个 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(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请求也可以以异步方式完成

API定义了一种在后台运行脚本的方法。然后,您可以在主页之外的线程中执行一些任务

看看这个和这个
请注意,历史上只有新浏览器使用此功能时,JavaScript才会受到一个重要的限制:它的所有执行过程都保留在一个唯一的线程中

您可以尝试使用
setTimeout()
setInterval()
方法模拟并行任务。由于
XMLHttpRequest
对象避免了从远程服务器加载资源时冻结UI,因此HTTP请求也可以以异步方式完成

API定义了一种在后台运行脚本的方法。然后,您可以在主页之外的线程中执行一些任务

看看这个和这个 请注意,只有新浏览器才能使用此功能