首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Angular.js中实现承诺时始终运行一些代码

如何在Angular.js中实现承诺时始终运行一些代码
EN

Stack Overflow用户
提问于 2013-04-16 22:52:43
回答 3查看 71.3K关注 0票数 83

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

我认为这是一个相当常见的问题,所以我认为这是可以做到的,但在文档中找不到任何东西。你知道这是不是可以做到?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-23 22:23:10

该功能已在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和安卓浏览器)上不会中断:

$http.get('/foo')['finally'](doSomething);
票数 164
EN

Stack Overflow用户

发布于 2017-07-20 00:00:36

对于那些不使用angularJS的人,如果您可以捕获错误(不确定.finally()是否能做到这一点),您可以使用.catch().then()来避免重复的代码。

Promise.resolve()
  .catch(() => {})
  .then(() => console.log('finally'));

catch()最终可能对日志记录或其他清理有用。https://jsfiddle.net/pointzerotwo/k4rb41a7/

票数 2
EN

Stack Overflow用户

发布于 2013-04-17 16:31:19

我将使用ngView来呈现页面内容,并触发移除event $viewContentLoaded上的模态。有关该事件,请参见http://docs.angularjs.org/api/ng.directive:ngView;有关$on事件侦听器,请参见http://docs.angularjs.org/api/ng.$rootScope.Scope。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16040263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档