2014-11-25 5 views
0

Есть ли у AngularJS механизм для выполнения длительных задач? Например GWT имеет функцию следующим образом:AngularJS. Выполнение долговременных задач

Иногда вы хотите, чтобы разбить логическую петлю так, чтобы петля событий JavaScript получает возможность работать между двумя кусками кода. Класс Scheduler в GWT позволит вам это сделать. Логика, которую вы передадите в Планировщик, будет запущена в какой-то момент в будущем, после того как управление было возвращено в цикл событий JavaScript. Эта небольшая задержка может дать интерфейсу возможность обрабатывать некоторые пользовательские события или инициализировать другой код .

ответ

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

JavaScript исторически страдает от важного ограничения: весь процесс ее выполнения остается внутри уникальной резьба.

Вы можете попробовать имитировать параллельные задачи, используя setTimeout() и setInterval() методов. HTTP-запросы также могут выполняться асинхронно, благодаря объекту XMLHttpRequest, который позволяет избежать замораживания пользовательского интерфейса при загрузке ресурсов с удаленных серверов.

API-интерфейсы Web Workers определяют способ запуска сценария в фоновом режиме. Затем вы можете выполнять некоторые задачи в потоках, живущих вне главной страницы.

Взгляните на эту article и это example Имейте в виду, что только новые браузеры support эта функция

Смежные вопросы