百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

碎片时间学编程「134]:JS 承诺中的 then 和 finally 有什么区别?

xsobi 2025-01-14 18:22 1 浏览


从表面上看,Promise.prototype.then()Promise.prototype.finally()似乎很相似。但是我们需要记住一些重要的区别。

第一个也是最明显的一个是它finally()没有收到承诺链的结果值。同样,由于 finally() 没有收到任何值,因此也无法更改 promise 的已解析值。

JavaScript

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 链中捕获错误,以便在其他地方处理它们。在这种情况下,then()不会执行链接的,而finally()会执行。此外,如果前一个catch()抛出异常,你最终会处于同样的情况。

new Promise((resolve, reject) => reject(0))
  .catch(x => {
    console.log(x); // 0
    throw x;
  })
  .then(x => {
    console.log(x); // Will not run
  })
  .finally(() => {
    console.log('clean up'); // 'clean up'
  });
// Uncaught (in promise) 0

这里的要点是你不应该替代then()finally()除非有非常具体的理由这样做。根据经验,finally()应该用于清理(清除超时、清空引用、重置 UI 状态等)。

更多内容请访问我的网站:https://www.icoderoad.com

相关推荐

IWSC施行新一轮性能平衡变动 保时捷动力得到提升

在下周末IWSC美洲赛道(COTA)站的比赛开始前,IMSA又对赛事内多个组别的赛车进行了性能平衡(BoP)调整,其中GTD组别的保时捷911GT3R获得了动力上的提升。IMSA在本周四确定了最新...

22个超详细的 JS 数组方法

作者:Yushiahttps://juejin.cn/post/6907109642917117965...

碎片时间学编程「134]:JS 承诺中的 then 和 finally 有什么区别?

...

10 个常问的 JS 面试题

作者:JoanneLee-(Vivi)译者:前端小智来源:medium1.如何理解JS中的`this`关键字?JS初学者总是对this关键字感到困惑,因为与其他现代编程语言相比,JS中...

一文理解js原型和原型链是什么以及作用

js三座大山,这是第二座山,今天来和大家一起翻山越岭。阅读前请记住这句话js里万物皆对象。js原型、原型链一镜到底开始:1、知道什么是原型和原型链首先请想下你平常写代码数组的常用方法有哪几个,答:ma...

JS 类型检测:谈 typeof 和 instanceof 的缺陷与优化

在javascript中,typeof和instanceof是用来判断数据类型比较通用的两个方法,但这两种方式并不能完全解决实际中遇到的问题。因此,这篇文章的目的是通过对这两个方法介绍来分析其存...

Js中的new操作符起到什么作用?

Js是当今时代最常用的代码操作语言,其中new操作符尤为常见。对于很多代码小白来说,并不清楚new在Js中扮演着怎样的角色,具体是做什么用,干了什么。本文从new操作符的作用着手,简单介绍new操作符...

深入理解 JS 原型链

JS中的原型链在面试中可以说是“必考题”日常开发不常遇到,而且在ES6之后,原型链就更少见了...

一篇文章读懂JS原型和原型链

前言你好!欢迎阅读本篇文章,今天我将要用一篇文章带你深入理解JavaScript中的原型和原型链,让我们一起揭开原型神秘的面试,一起窥探其中的奥妙。一切皆是对象看到这个标题你可能就有你可能就有疑问了...

图文解说 javascript中 原型和原型链 构造函数 组合使用方法

原型和原型链原型和原型链...

JS原型、原型链深入理解

原型是JavaScript中一个比较难理解的概念,原型相关的属性也比较多,对象有”prototype”属性,函数对象有”prototype”属性,原型对象有”constructor”属性。...

Linux export命令用法

export命令是Linux/Unix中常用的命令之一,用于设置环境变量和将变量导出到子进程中。使用格式:export[-fnp][name[=value]]参数说明:-f:表示将函数名也一并传递...

Windows Unix Linux Android壁纸

复仇者联盟壁纸

在 Linux/Unix/Mac 下清除 DNS 查询缓存

在MS-Windows下,你可以使用ipconfig命令来清除dns缓存。然而,Linux和Unix提供了不同的方法来清除缓存。Linux可以运行nscd或者BIND或者dnsmasq作为...

如何在Linux系统安装中文输入法以及使用

在安装Linux系统时如果设置默认语言是英文,那么该如何输入中文呢?首先,无论是中文的还是英文的Linux系统,输入法基本都是内置的ibus输入法,如果你不想下载别的输入法,你可以就用ibus的中文输...