如何在我的项目中编写异步代码

时间:2013-08-31 10:10:01

标签: javascript angularjs asynchronous promise

请您提供一个使此代码异步的示例 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被执行时冻结我的线程 知道怎么做吗?

2 个答案:

答案 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);
     }); 
})