在我的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);