摘要:随着的出现,我最近发现自己在我的代码中使用了更多。但老实说,我终于用做了一点练习。当我去实际使用它时,我有点不确定它的细节。事实上,这就是本文的灵感来源。
随着async /await的出现,我最近发现自己在我的代码中使用了更多try /catch /finally。但老实说,我终于用“finally”做了一点练习。当我去实际使用它时,我有点不确定它的细节。所以我把几个例子放在一起。
当你 throw 一个 catch考虑你在一个catch块跑出一个异常。在退出函数之前没有什么可以捕获你的throw。那“ finally”会运行吗??
function example() { try { fail() } catch (e) { console.log("Will finally run?") throw e } finally { console.log("FINALLY RUNS!") } console.log("This shouldn"t be called eh?") } example()
控制台结果
Will finally run? FINALLY RUNS! Uncaught ReferenceError: fail is not defined at example (:3:5) at :15:2
finally运行,即使并没有打印最后一个日志语句!但它确实抛出了错误。
你可以看到finally有点特别;它允许你在抛出错误和离开函数之间运行,即使抛出catch块。
尝试没有捕获(catch)您是否知道如果您提供finally块,您也不需要提供catch块?你可能做到了,但值得一提!
接下来的问题是:即使在try块中没有出错,finally块也会被调用吗?
function example() { try { console.log("Hakuna matata") } finally { console.log("What a wonderful phrase!") } } example()
控制台结果
[log] Hakuna matata [log] What a wonderful phrase!
是的,即使没有出错也会调用finally。当然,当does出错时,它也会被调用。
这就是finally背后的想法 - 它可以让你处理这两种情况,正如你在这个例子中看到的那样:
function example() { try { console.log("I shall try and fail"); fail(); } catch (e) { console.log("Then be caught"); } finally { console.log("And finally something?"); } } example()
控制台结果
[log] I shall try and fail [log]Then be caught [log] And finally something?那如果return了? finally还会执行吗?
所以最后让你在异常发生时自己清理。但是什么时候什么都不会出错,你只是从函数中“返回”正常...在try块中?
看看下面的例子。example()中的finally块是否可以运行after你已经命中了return语句?
function example() { try { console.log("I"m picking up my ball and going home.") return } finally { console.log("Finally?") } } example()
控制台结果
[log] I"m picking up my ball and going home. [log]Finally?规则
try /catch /finally上的finally块都将运行 - 即使你提前catch或"return`。
这就是它如此有用的原因;无论发生什么情况,它都将运行,那么这就是将,始终要运行的代码的理想场所,比如容易出错的IO的清理代码。事实上,这就是本文的灵感来源。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/53723.html
摘要:随着的出现,我最近发现自己在我的代码中使用了更多。但老实说,我终于用做了一点练习。当我去实际使用它时,我有点不确定它的细节。事实上,这就是本文的灵感来源。 随着async /await的出现,我最近发现自己在我的代码中使用了更多try /catch /finally。但老实说,我终于用finally做了一点练习。当我去实际使用它时,我有点不确定它的细节。所以我把几个例子放在一起。 当你...
摘要:随着的出现,我最近发现自己在我的代码中使用了更多。但老实说,我终于用做了一点练习。当我去实际使用它时,我有点不确定它的细节。事实上,这就是本文的灵感来源。 随着async /await的出现,我最近发现自己在我的代码中使用了更多try /catch /finally。但老实说,我终于用finally做了一点练习。当我去实际使用它时,我有点不确定它的细节。所以我把几个例子放在一起。 当你...
摘要:关于异常处理的文章已有相当的篇幅,本文简单总结了的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析。是程序正常运行中,可以预料的意外情况,应该被捕获并进行相应处理。 关于异常处理的文章已有相当的篇幅,本文简单总结了Java的异常处理机制,并结合代码分析了一些异常处理的最佳实践,对异常的性能开销进行了简单分析。博客另一篇文章《[译]Java异常处理的最...
摘要:第一个是,是你传递给异常的构造函数的参数,比如你可以使用属性来访问到该消息第二个参数是异常堆栈跟踪,非常重要。异常产生后能在后端正确处理是的关键部分。我将向你展示自定义构造函数和错误代码的方法,我们可以轻松地将其传递给前端或任何调用者。 By Lukas Gisder-Dubé | nov 14, 2018 原文 接着我上一篇文章,我想谈谈异常。我肯定你之前也听过——异常是个好东西。一...
阅读 3764·2021-11-24 09:39
阅读 1787·2021-11-02 14:41
阅读 793·2019-08-30 15:53
阅读 3465·2019-08-29 12:43
阅读 1149·2019-08-29 12:31
阅读 3064·2019-08-26 13:50
阅读 772·2019-08-26 13:45
阅读 962·2019-08-26 10:56