在我的Angular.js的应用程序,我跑了一些异步操作。 它开始我盖上模态的div应用程序之前,那么一旦操作完成,我需要删除DIV,操作是否成功与否。
目前,我有这样的:
LoadingOverlay.start();
Auth.initialize().then(function() {
LoadingOverlay.stop();
}, function() {
LoadingOverlay.stop(); // Code needs to be duplicated here
})
它工作得很好,但是我宁愿有一些清洁剂这样的伪代码:
LoadingOverlay.start();
Auth.initialize().finally(function() { // *pseudo-code* - some function that is always executed on both failure and success.
LoadingOverlay.stop();
})
我想这是一个相当普遍的问题,所以我想这是可以做到,但不能找到文档中任何事情。 任何想法,如果它可以做什么?
该功能已得到落实这个要求拉 ,现在AngularJS的一部分。 它最初被称为“永远”,再后来更名为finally
,所以代码应该是如下:
LoadingOverlay.start();
Auth.initialize().then(function() {
// Success handler
}, function() {
// Error handler
}).finally(function() {
// Always execute this on both error and success
});
需要注意的是,因为finally
是保留关键字,这可能使其不能在某些浏览器(如IE和Android浏览器)突破需要使它成为一个字符串:
$http.get('/foo')['finally'](doSomething);
我使用一把umbraco版本7.3.5与AngularJS版本1.1.5后端,发现了这个线索。 当我执行经批准的答案,我得到了错误:
XXX(...),然后(...)。最后是不是一个函数
但是没有什么工作是always
。 如果其他人使用的是旧版本AngularJS的发现这个线程,不能使用finally
使用这个代码,而不是
LoadingOverlay.start();
Auth.initialize().then(function() {
// Success handler
}, function() {
// Error handler
}).always(function() {
// Always execute this on both error and success
});
我会用ngView来渲染页面的内容和你的模态事件$ viewContentLoaded触发删除。 见http://docs.angularjs.org/api/ng.directive:ngView该事件和http://docs.angularjs.org/api/ng 。$ rootScope.Scope对事件侦听器$。
对于那些不使用angularJS,如果你确定与捕捉错误(不知道。最后()会这么做),你可以使用.catch()。然后,(),以避免重复的代码。
Promise.resolve()
.catch(() => {})
.then(() => console.log('finally'));
美中不足的()可能最终会被用于记录或其他清理反正有用。 https://jsfiddle.net/pointzerotwo/k4rb41a7/