【问题标题】:How to write async code in my project如何在我的项目中编写异步代码
【发布时间】:2013-08-31 18:30:57
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs asynchronous promise


    【解决方案1】:

    假设“reBuild”必须在“Process”运行之前完成,IMO 处理它的最佳方法是让 reBuild 和 Process 函数返回 Promise。 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);
         }); 
    })
    

    【讨论】:

      【解决方案2】:

      您可以处理事件,但最简单的方法是使用 setTimeout 并分段处理长循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-05
        • 2013-02-09
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        相关资源
        最近更新 更多