终于...终于有诺言的帖子
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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

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

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...
