看上去 promise.prototype.then() 和 promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。
第一个也最明显的是 finally() 没有得到 promise 链的结果。由于 finally() 没有收到值,因此无法更改 promise 的已解决值。
- new Promise((resolve, reject) => resolve(10))
- .then(x => {
- console.log(x); // 10
- return x + 1;
- })
- .finally(x => {
- console.log(x); // undefined
- return x + 2;
- });
- // Promise resolves to 11, the return value of then()
另一个差异与错误处理以及如何解决 promise 链有关。有时,您可能想要推迟捕获 promise 链中的错误,从而允许你在其他地方处理。在这种情况下,promise 链的 then() 将不会被执行,而 finally() 会。并且如果上一个 catch() 抛出,你最终会处于相同的情形之下。
- new Promise((resolve, reject) => reject(0))
- .catch(x => {
- console.log(x); // 0
- throw x;
- })
- .then(x => {
- console.log(x); // 将不会执行
- })
- .finally(() => {
- console.log('clean up'); // 'clean up'
- });
- // Uncaught (in promise) 0
这里的重点是,除非有非常特殊的原因,否则不应该替换 then() 和 finally()。 根据经验,finally() 应该用于清理(清除超时,使引用为空,重置 UI 状态等)。
随着企业数字化转型进程推进,各行业企业在数字基础设施一体化云平台、研运数字...
在K8S集群中,调度器负责将客户提交的pod绑到某个node节点上,完成pod调度的调度...
前言 在Java中,我们对于锁会比较熟悉,常用的有 synchronized、Lock锁,在java...
数据分析工作中,免不了与SQL数据库打交道,尤其是对库表的使用,所以如何对库表...
随着 Apache Flink 自身的发展,越来越多的企业选择 Apache Flink 应用于自身的...
2021年3月24日,主题为《数据的世界,世界的数据》的星环科技2021春季新品发布会...
而随着企业业务数据的不断丰富,加上大数据和人工智能技术的成熟和应用,企业管...
日前 阿里云云效联合阿里云大学团队 面向全国高校学子正式启动了83行代码重构大...
两种并行发展的趋势正在改变所有行业的信息技术格局:云和人工智能(AI)和机器学习...
当前 数据要素的重要意识已经深入企业内部 但从数据要素到数据资产化的过程中 企...