AngularJS有一些執行長時間運行任務的機制嗎?例如,GWT具有這樣的功能:AngularJS。執行長時間運行的任務
有時您想分解您的邏輯循環,以便事件循環有機會在兩段代碼之間運行。 GWT中的 調度程序類將允許您這樣做。 傳遞給調度程序的邏輯將在將來的某個時間點運行,此時控制 已返回到JavaScript事件循環。這個小的延遲可能會給接口一個機會來處理一些用戶事件或初始化其他代碼。
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定義了一種在後臺運行腳本的方法。然後,您可以在主頁外部的線程中執行一些任務。