请您提供一个使此代码异步的示例 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
})
我想让它异步,我不想在reBuild和Process被执行时冻结我的线程 知道怎么做吗?
答案 0 :(得分:0)
您可以处理事件,但最简单的方法是使用setTimeout并处理部分中的长循环。
答案 1 :(得分:0)
假设'reBuild'必须在'Process'运行之前完成,接近IMO的最佳方法是让reBuild和Process函数返回promises。 Promise是一种处理异步事件的javascript方式 - http://docs.angularjs.org/api/ng。$ q。
例如,对于您的reBuild方法而不是具有以下内容:
var reBuild = function(words) {
// 5 second operation here
return words;
}
这样做:(您需要将$ q和$ timeout服务注入控制器才能使其正常工作)
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);
});
})