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

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

liuian 2025-03-25 15:21 120 浏览


从表面上看,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

相关推荐

台式电脑怎么连接无线网卡步骤
台式电脑怎么连接无线网卡步骤

一般网上买的无线网卡都是免驱的,插上去,在右下角找到wifi输入密码就可以如果不能上网以下操作在计算机图标上单击鼠标右键,然后单击属性设备管理器链接,打开【设备管理器】窗口,在【网络适配器】的子菜单中,可以看到已安装好的无线网卡驱动。在无线...

2026-01-26 23:37 liuian

windows11简体中文版下载(windows11正式版 下载)

原因排查:1、检查当前的网络连接状态。2、更换其它电脑,看是否能登陆。3、如果更换其它电脑或者更换网络连接,就可以登陆的话,那就是电脑或者网络的原因。如果在其它的电脑或者网络上也无法登陆,可能是对方的...

win7没有更改密钥选项(win7更改不了密匙)

如果您的Windows7已经成功激活且您不打算更改产品密钥,那么您无需采取任何措施。激活后,您可以继续正常使用操作系统,无需再次激活或更改密钥。只有在您需要更换计算机硬件或重新安装操作系统时,才需要...

win8电脑安装win7(win8系统安装win7)

电脑一进入系统就死机应该是系统损坏了。可能的原因有两种,一是用户误删了系统文件破坏了系统,二是电脑中了病毒,病毒破坏了系统。建议:重装系统。重装系统的方法有如下三种:一、使用系统安装光盘安装系统。找到...

u盘快速格式化好不好(u盘快速格式化是什么)

快速格式化和完全格式化都可以用于格式化U盘,但它们的处理方式不同。快速格式化只是简单地将文件系统的头部信息进行清理,可以很快地完成格式化过程,但并没有对硬盘进行实际的数据清除。所以,使用快速格式化可以...

电脑定时自动关机命令(电脑定时自动关机命令)
电脑定时自动关机命令(电脑定时自动关机命令)

1.电脑一般不可以设置定时开机,设置定时关机方法如下:按win+R打开运行菜单。2.在输入框中输入“Shutdown?-s-t60”格式的语句就能创建定时关机任务,其中60代表60秒,如果想要定时一小时那就是60*60=3600,语句也...

2026-01-26 22:21 liuian

hp1007打印机无法打印(hp1007打印机打印不进纸什么原因)

首先,你要说下,你的打印机是怎么连接使用的,是共享还是单机使用。你可以试试连续掀起放下五次,打印机的上盖,看看能不能打印一张全横条的测试页,如果可以的话,说明机器是好的,那么问题出在电脑那里,如果是单...

w10密钥激活(w10密钥激活码永久版)
w10密钥激活(w10密钥激活码永久版)

1.首先进入到win10专业版系统桌面中,点击开始按钮,然后选择设置选项打开,进入下一步。  2.在打开的Windows设置界面底部点击更新和安全项打开,然后进入下一步。  3.在打开的更新和安全设置界面的左侧可以看到一个激活选项,单击以进...

2026-01-26 21:55 liuian

电脑死机了咋整(电脑死机咋搞)

1、很多电脑假死是由于运行的程序没有得到响应引起的,你像你在同一个时间打开过多的程序,导致资源消耗严重就会出现停止响应的情况,这个时候你要先按“Ctrl+Alt+Del”组合键打开任务管理器。2、然后...

windows蓝屏代码大全(windows蓝屏代码大全及解决方案)
windows蓝屏代码大全(windows蓝屏代码大全及解决方案)

电脑蓝屏代码大全:1、0X0000000操作完成  0X0000001不正确的函数  0X0000002系统找不到指定的文件  0X0000003系统找不到指定的路径  0X0000004系统无法打开文件  0X0000005...

2026-01-26 21:21 liuian

联想台式电脑怎么调节屏幕亮度

可以通过以下三种方法调节屏幕亮度:一、在使用的操作系统中调节亮度的方法(以Win10为例):【方法1】:点击开始菜单栏,然后依次选择设置——系统——显示选项,右侧可以看到亮度级别,用鼠标左右拖动亮...

自己的邮箱号是多少怎么查询

1、以QQ邮箱为例,电子邮箱号即为:“QQ号”@qq.com或者设置的英文邮箱账号和Foxmail邮箱账号。查看需要首先打开QQ面板。2、在面板中点击“我的邮箱”选项。3、进入QQ邮箱后,可以在页面上...

深度系统u盘安装教程(深度u盘安装win7系统步骤)
  • 深度系统u盘安装教程(深度u盘安装win7系统步骤)
  • 深度系统u盘安装教程(深度u盘安装win7系统步骤)
  • 深度系统u盘安装教程(深度u盘安装win7系统步骤)
  • 深度系统u盘安装教程(深度u盘安装win7系统步骤)
win7家庭版如何升级win10(win7家庭普通版怎么升级)

一、win7直接升级win10方法如下1、打开控制面板,点击windowsupdate;2、点击检查更新;3、等待检查完成后点击现在安装;4、安装完成后会提示重新启动;5、关闭系统前会像打补丁一样配...

pc版鸿蒙系统(pc鸿蒙系统出了吗)

给我的感觉就是华为在系统方面越来越好,在操作易用性、流畅度、动画方面都表现得不错。但是,让我把EMUI11.0跟鸿蒙2.0两者作比较,我只能说在操作体验方面鸿蒙2.0很平淡,变化不多。在鸿蒙2.0上的...