Javascript - 最后在使用AngularJS尝试块完成之前执行

时间:2015-07-13 11:35:42

标签: javascript angularjs

我正在使用AngularJS应用程序。我有一张表格。提交我正在调用一个函数。我使用了javascript try / catch / finally块

$scope.save = function() {
          try {
                //Block of code to try
              $scope.submit.text = "Submitting";
              $scope.submit.disable = true;
              $timeout(function(){
                  alert('successfully saved');
              }, 5000);
            }
            catch(err) {
                //Block of code to handle errors
            } 
            finally {
                alert("finally");
                $scope.submit.text = "Submit";
                $scope.submit.disable = false;
            }

      }

我现在用了一个计时器。但后来我可能会使用AJAX调用。问题是

最后块在时间结束前执行。怎么解决这个问题?

1 个答案:

答案 0 :(得分:4)

在方法结束之前执行finally方法的原因是javascript方法没有异步运行。 Promises将解决此问题。

以下是在角度中使用的q.js中定义的承诺:

  

promise是表示返回值或抛出的对象   该函数最终可能提供的异常。承诺也可以   用作远程对象的代理以克服延迟。

承诺的一个保证是,将调用成功或错误回调,但不会同时调用。如果您需要确保执行特定功能而不管承诺的结果如何,会发生什么?您可以通过使用finally()方法在promise上注册该函数来完成此操作。

假设您有一个函数getData(),您正在进行一些$ http请求并从后端获取一些数据。然后你可以使用:

var promise = getData()
    .then(function(data) {
      console.log(data)
    }, function(error) {
      console.error(error)
    })
    .finally(function() {
      console.log()
    })
})