2013-08-31 56 views
1

請您提供一個使此代碼異步的示例 1)我必須通過$ http.get函數從服務器讀取文件 2)將文件讀取到數組中 3 )過程中它(重建它) 4),並在每一個動作如何在我的項目中編寫異步代碼

顯示進度條,這樣的代碼是:

$http.get(filename).success(function (data) { 
    words = data.split(/\n| /); 
    reBuild(words) //this action takes at least 5 seconds 
    Process(words) // this action takes at least 4 seconds 
}) 

,我希望把它異步,我不想凍結我的線程重建時和進程已被執行 任何想法如何做到這一點?

回答

0

假設'reBuild'必須在'Process'可以運行之前完成,那麼處理它的最好方法就是讓reBuild和Process函數返回promise。 Promise是處理異步事件的JavaScript方式 - http://docs.angularjs.org/api/ng。$ q。

例如,對於您的重建,而不必像這樣的方法:

var reBuild = function(words) { 
    // 5 second operation here 
    return words; 
} 

做這樣的:(你需要到$ Q $和超時服務注入到控制器,使其工作)

var reBuild = function(words) { 
    var deferred = $q.defer(); 

    $timeout(function() { 
     // do 5 second operation 
     deferred.resolve(words); 
    }); 

    return deferred.promise; 
} 

然後在你的控制器,你可以這樣做:

$http.get(filename).success(function (data) { 
    words = data.split(/\n| /); 
    reBuild(words).then(function(reBuiltWords) { 
     Process(reBuiltWords); 
    }); 
}) 
0

您可以處理事件,但最簡單的方法是使用setTimeout並在零件中處理長循環。

相關問題