在我的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();
- })
我认为这是一个相当普遍的问题,所以我认为可以做,但在文档中找不到任何东西。任何想法如果可以做到?
该功能已在
this pull request中实现,现在是AngularJS的一部分。它最初被称为“always”,然后重命名为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);