惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

Lynx

Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方 Lynx | 小熊写字的地方
Lynx | 小熊写字的地方
2018-07-09 · via Lynx

Jordan Harband 提出了 Promise.prototype.finally 这一章节的提案。

如何工作?

.finally() 这样用:

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

finally 的回调总是会被执行。作为比较:

  • then 的回调只有当 promise 为 fulfilled 时才会被执行。
  • catch 的回调只有当 promise 为 rejected,或者 then 的回调抛出一个异常,或者返回一个 rejected Promise 时,才会被执行。
    换句话说,下面的代码段:
    promise
    .finally(() => {
    «statements»
    });

等价于:

promise
.then(
result => {
«statements»
return result;
},
error => {
«statements»
throw error;
}
);

使用案例

最常见的使用案例类似于同步的 finally 分句:处理完某个资源后做些清理工作。不管是一切正常,还是出现了错误,这样的工作都是有必要的。
举个例子:

let connection;
db.open()
.then(conn => {
connection = conn;
return connection.select({ name: 'Jane' });
})
.then(result => {
// Process result
// Use `connection` to make more queries
})
···
.catch(error => {
// handle errors
})
.finally(() => {
connection.close();
});

.finally() 类似于同步代码中的 finally {}

同步代码里,try 语句分为三部分:try 分句,catch 分句和 finally 分句。
对比 Promise:

  • try 分句相当于调用一个基于 Promise 的函数或者 .then() 方法
  • catch 分句相当于 Promise 的 .catch() 方法
  • finally 分句相当于提案在 Promise 新引入的 .finally() 方法

然而,finally {} 可以 return 和 throw ,而在.finally() 回调里只能 throw, return 不起任何作用。这是因为这个方法不能区分显式返回和正常结束的回调。

可用性

深入阅读


原文:http://exploringjs.com/es2018-es2019/ch_promise-prototype-finally.html