Javascript-最终在try块使用AngularJS完成之前执行
我正在使用AngularJS应用程序。我有一张表格。在提交时,我正在调用一个函数。我使用了javascripttry/catch/finally块Javascript-最终在try块使用AngularJS完成之前执行,javascript,angularjs,Javascript,Angularjs,我正在使用AngularJS应用程序。我有一张表格。在提交时,我正在调用一个函数。我使用了javascripttry/catch/finally块 $scope.save = function() { try { //Block of code to try $scope.submit.text = "Submitting"; $scope.submit.disable = true;
$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调用。问题是
最后,在时间结束之前执行块。如何解决这个问题?在时间结束之前执行finally方法的原因是javascript方法不是异步运行的<代码>承诺将解决此问题 以下是如何定义promise的,其中在angular中使用: 承诺是表示返回值或抛出值的对象 函数最终可能提供的异常。承诺也可以 可以用作远程对象的代理以克服延迟 承诺的保证之一是调用成功或错误回调,但绝不同时调用两者。如果您需要确保特定函数的执行,而不管承诺的结果如何,会发生什么情况?您可以通过使用
finally()
方法在promise上注册该函数来实现这一点
假设您有一个函数getData()
,其中您正在发出一些$http请求并从后端获取一些数据。然后您可以使用:
var promise = getData()
.then(function(data) {
console.log(data)
}, function(error) {
console.error(error)
})
.finally(function() {
console.log()
})
})
由于超时函数是异步的,您需要在超时函数中移动try-catch-finally块。请检查:您还可以将任何异步函数调用转换为类似于promise对象的
kriskowal q
,该对象在AngularJS中广泛使用,称为$q
。