当前位置: 首页 > 面试题库 >

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

江阳冰
2023-03-14
问题内容

在我的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的一部分。它最初被称为“
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);


 类似资料:
  • 问题内容: 我有指令,它是带有后退按钮的网站标题,我想单击可返回到上一页。我如何以有角度的方式做到这一点? 我努力了: 这是指令js: 但什么也没发生。我查看了有关$ location 的angular.js API,但未找到有关后退按钮或的任何信息。 问题答案: 您需要在指令中使用链接函数: 参见jsFiddle。

  • 问题内容: 这是一个程序,可将数据从T恤衫网站上抓取,然后将产品信息写入CSV文件。 有3个刮擦功能和1个写入功能。 现在,我正面临一场绝对的噩梦,试图在没有任何第三方库或软件包的情况下实现如何在这里实现承诺。仅凭ES6的本机功能可以做到吗? 由于请求的异步性质,我需要每个函数及其请求在调用下一个函数之前完全完成。这样,我就可以使用下一个函数中的变量。 我怎么能简单地做到这一点而无需重写我的整个代

  • 问题内容: 我对angular中的$ q库如何工作有一个不错的想法,但是我不确定量角器或web-driver- js如何使用它们。(特别是因为我认为量角器/网络驱动程序/角度之间的利用率略有不同) 例如,我在量角器教程中看到的示例代码似乎是逐行编写的,并且假定上一个在下一个之前完成。(例如,browser.get(url)后跟browser.getTitle())是否存在某种隐含的承诺?(我不必手

  • 问题内容: 我要兑现一个承诺。关键是我真的想在第一个诺言兑现后立即访问(仍在等待中的)第二个 诺言 。不幸的是,当两个诺言都实现时,我似乎只能获得第二个诺言的解决值。 这是我想到的用例: 该功能显示文件选择器,用户可以在其中从自己的硬盘驱动器或URL中选择文件。它返回一个承诺,该承诺将在用户选择文件后立即兑现。此时,我们可能仍然必须通过网络下载所选文件。因此,我不能将所选文件作为分辨率值。相反,应

  • 您好,谢谢您在这里看我的问题。 我不熟悉编码,正在学习python。我使用的是Linux,特别是Ubuntu。我编写了一个简单的基于tkinter的应用程序,它在启动时会显示特定日期的倒计时,然后有一个按钮可以单击关闭窗口。我已经在PyCharm中运行了这个应用程序,它在那里工作得非常好。我在空闲时也能跑得很好。在这两种情况下,tkinter都导入并运行良好。 我找到了。py文件用于我在终端中的应