我正在使用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调用。问题是
最后块在时间结束前执行。怎么解决这个问题?
答案 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()
})
})