JavaScript Promise 中的 finally
块何时执行?最近在一个研讨会上有人问了我这个问题,我想写一篇小文章来消除一些困惑。
答案是,引用斯内普的话:
……总是。
基本结构如下:
try { // 我将尝试为你执行一些代码 } catch (error) { // 我将处理该过程中出现的任何错误 } finally { // 无论如何我都会执行 }
例如,这是一个 Chuck Norris 笑话生成器示例,其内容来自 Chuck Norris 数据库 API。(顺便说一句,我从 Todd Motto 的非常棒的开放 API 列表中找到了这个 API,它非常适合演示和副项目。)
async function getData() { try { let chuckJokes = await fetch(`https://api.chucknorris.io/jokes/random`) .then(res => res.json()); console.log('我为你获取了一些数据!'); document.getElementById("quote").innerHTML = chuckJokes.value; } catch (error) { console.warn(`这里有一个错误:${error}`); } finally { console.log('无论如何,finally 都会执行!'); } }
控制台输出:(此处应显示成功获取笑话的控制台输出)
现在,让我们在 API 的 URL 中引入一个错字,意外地添加一堆 <var>r</var>
。这将导致我们的 try
语句失败,这意味着 catch
现在会抛出一个错误。
async function getData() { try { // 让我们稍微搞砸一下 let chuckJokes = await fetch(`https://api.chucknorrrrris.io/jokes/random`) .then(res => res.json()); console.log('我为你获取了一些数据!'); document.getElementById("quote").innerHTML = chuckJokes.value; } catch (error) { console.warn(`这里有一个错误:${error}`); } finally { console.log('无论如何,finally 都会执行!'); } }
控制台输出:(此处应显示错误信息和 finally
块的输出)
一个非常重要的方面是,示例中没有说明的是,即使在 try
或 catch
块中,return
或 break
语句停止了代码,finally
块也会运行。
何时使用 finally
?
我发现它在两种不同的情况下特别有用,尽管我相信还有其他情况:
-
当我在
try
和catch
块中需要重复代码时。 这是我在编写的 Vue 食谱中一个示例。我在finally
块中关闭了加载状态。这包括,就像上面的示例一样,我需要在任何情况下更改 UI。 - 当需要进行一些清理工作时。 Oracle 在其文档中提到了这一点。它是 Java,但前提相同。
finally
的用途不如 try
和 catch
频繁,但在某些情况下值得注意。希望这能澄清你的疑问!
以上是终于...终于有诺言的帖子的详细内容。更多信息请关注PHP中文网其他相关文章!

@keyframesandCSSTransitionsdifferincomplexity:@keyframesallowsfordetailedanimationsequences,whileCSSTransitionshandlesimplestatechanges.UseCSSTransitionsforhovereffectslikebuttoncolorchanges,and@keyframesforintricateanimationslikerotatingspinners.

我知道,我知道:有大量的内容管理系统选项可用,而我进行了几个测试,但实际上没有一个是一个,y&#039;知道吗?怪异的定价模型,艰难的自定义,有些甚至最终成为整个&

链接CSS文件到HTML可以通过在HTML的部分使用元素实现。1)使用标签链接本地CSS文件。2)多个CSS文件可通过添加多个标签实现。3)外部CSS文件使用绝对URL链接,如。4)确保正确使用文件路径和CSS文件加载顺序,优化性能可使用CSS预处理器合并文件。

选择Flexbox还是Grid取决于布局需求:1)Flexbox适用于一维布局,如导航栏;2)Grid适合二维布局,如杂志式布局。两者在项目中可结合使用,提升布局效果。

包含CSS文件的最佳方法是使用标签在HTML的部分引入外部CSS文件。1.使用标签引入外部CSS文件,如。2.对于小型调整,可以使用内联CSS,但应谨慎使用。3.大型项目可使用CSS预处理器如Sass或Less,通过@import导入其他CSS文件。4.为了性能,应合并CSS文件并使用CDN,同时使用工具如CSSNano进行压缩。

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

重构自己的代码看起来是什么样的?约翰·瑞亚(John Rhea)挑选了他写的一个旧的CSS动画,并介绍了优化它的思维过程。

CSSanimationsarenotinherentlyhardbutrequirepracticeandunderstandingofCSSpropertiesandtimingfunctions.1)Startwithsimpleanimationslikescalingabuttononhoverusingkeyframes.2)Useeasingfunctionslikecubic-bezierfornaturaleffects,suchasabounceanimation.3)For


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版
中文版,非常好用

WebStorm Mac版
好用的JavaScript开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具