如何始终运行一些代码时承诺在Angular.js满足(How to always run some

2019-08-31 08:25发布

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

我想这是一个相当普遍的问题,所以我想这是可以做到,但不能找到文档中任何事情。 任何想法,如果它可以做什么?

Answer 1:

该功能已得到落实这个要求拉 ,现在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);


Answer 2:

我使用一把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
});


Answer 3:

我会用ngView来渲染页面的内容和你的模态事件$ viewContentLoaded触发删除。 见http://docs.angularjs.org/api/ng.directive:ngView该事件和http://docs.angularjs.org/api/ng 。$ rootScope.Scope对事件侦听器$。



Answer 4:

对于那些不使用angularJS,如果你确定与捕捉错误(不知道。最后()会这么做),你可以使用.catch()。然后,(),以避免重复的代码。

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

美中不足的()可能最终会被用于记录或其他清理反正有用。 https://jsfiddle.net/pointzerotwo/k4rb41a7/



文章来源: How to always run some code when a promise is fulfilled in Angular.js