摘要:隨著的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多。但老實(shí)說(shuō),我終于用做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。事實(shí)上,這就是本文的靈感來(lái)源。
隨著async /await的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多try /catch /finally。但老實(shí)說(shuō),我終于用“finally”做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。所以我把幾個(gè)例子放在一起。
當(dāng)你 throw 一個(gè) catch考慮你在一個(gè)catch塊跑出一個(gè)異常。在退出函數(shù)之前沒(méi)有什么可以捕獲你的throw。那“ finally”會(huì)運(yùn)行嗎??
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()
控制臺(tái)結(jié)果
Will finally run? FINALLY RUNS! Uncaught ReferenceError: fail is not defined at example (:3:5) at :15:2
finally運(yùn)行,即使并沒(méi)有打印最后一個(gè)日志語(yǔ)句!但它確實(shí)拋出了錯(cuò)誤。
你可以看到finally有點(diǎn)特別;它允許你在拋出錯(cuò)誤和離開(kāi)函數(shù)之間運(yùn)行,即使拋出catch塊。
嘗試沒(méi)有捕獲(catch)您是否知道如果您提供finally塊,您也不需要提供catch塊?你可能做到了,但值得一提!
接下來(lái)的問(wèn)題是:即使在try塊中沒(méi)有出錯(cuò),finally塊也會(huì)被調(diào)用嗎?
function example() { try { console.log("Hakuna matata") } finally { console.log("What a wonderful phrase!") } } example()
控制臺(tái)結(jié)果
[log] Hakuna matata [log] What a wonderful phrase!
是的,即使沒(méi)有出錯(cuò)也會(huì)調(diào)用finally。當(dāng)然,當(dāng)does出錯(cuò)時(shí),它也會(huì)被調(diào)用。
這就是finally背后的想法 - 它可以讓你處理這兩種情況,正如你在這個(gè)例子中看到的那樣:
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()
控制臺(tái)結(jié)果
[log] I shall try and fail [log]Then be caught [log] And finally something?那如果return了? finally還會(huì)執(zhí)行嗎?
所以最后讓你在異常發(fā)生時(shí)自己清理。但是什么時(shí)候什么都不會(huì)出錯(cuò),你只是從函數(shù)中“返回”正常...在try塊中?
看看下面的例子。example()中的finally塊是否可以運(yùn)行after你已經(jīng)命中了return語(yǔ)句?
function example() { try { console.log("I"m picking up my ball and going home.") return } finally { console.log("Finally?") } } example()
控制臺(tái)結(jié)果
[log] I"m picking up my ball and going home. [log]Finally?規(guī)則
try /catch /finally上的finally塊都將運(yùn)行 - 即使你提前catch或"return`。
這就是它如此有用的原因;無(wú)論發(fā)生什么情況,它都將運(yùn)行,那么這就是將,始終要運(yùn)行的代碼的理想場(chǎng)所,比如容易出錯(cuò)的IO的清理代碼。事實(shí)上,這就是本文的靈感來(lái)源。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/53723.html
摘要:隨著的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多。但老實(shí)說(shuō),我終于用做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。事實(shí)上,這就是本文的靈感來(lái)源。 隨著async /await的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多try /catch /finally。但老實(shí)說(shuō),我終于用finally做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。所以我把幾個(gè)例子放在一起。 當(dāng)你...
摘要:隨著的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多。但老實(shí)說(shuō),我終于用做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。事實(shí)上,這就是本文的靈感來(lái)源。 隨著async /await的出現(xiàn),我最近發(fā)現(xiàn)自己在我的代碼中使用了更多try /catch /finally。但老實(shí)說(shuō),我終于用finally做了一點(diǎn)練習(xí)。當(dāng)我去實(shí)際使用它時(shí),我有點(diǎn)不確定它的細(xì)節(jié)。所以我把幾個(gè)例子放在一起。 當(dāng)你...
摘要:關(guān)于異常處理的文章已有相當(dāng)?shù)钠疚暮?jiǎn)單總結(jié)了的異常處理機(jī)制,并結(jié)合代碼分析了一些異常處理的最佳實(shí)踐,對(duì)異常的性能開(kāi)銷(xiāo)進(jìn)行了簡(jiǎn)單分析。是程序正常運(yùn)行中,可以預(yù)料的意外情況,應(yīng)該被捕獲并進(jìn)行相應(yīng)處理。 關(guān)于異常處理的文章已有相當(dāng)?shù)钠疚暮?jiǎn)單總結(jié)了Java的異常處理機(jī)制,并結(jié)合代碼分析了一些異常處理的最佳實(shí)踐,對(duì)異常的性能開(kāi)銷(xiāo)進(jìn)行了簡(jiǎn)單分析。博客另一篇文章《[譯]Java異常處理的最...
摘要:第一個(gè)是,是你傳遞給異常的構(gòu)造函數(shù)的參數(shù),比如你可以使用屬性來(lái)訪問(wèn)到該消息第二個(gè)參數(shù)是異常堆棧跟蹤,非常重要。異常產(chǎn)生后能在后端正確處理是的關(guān)鍵部分。我將向你展示自定義構(gòu)造函數(shù)和錯(cuò)誤代碼的方法,我們可以輕松地將其傳遞給前端或任何調(diào)用者。 By Lukas Gisder-Dubé | nov 14, 2018 原文 接著我上一篇文章,我想談?wù)劗惓!N铱隙阒耙猜?tīng)過(guò)——異常是個(gè)好東西。一...
閱讀 3819·2021-11-24 09:39
閱讀 1823·2021-11-02 14:41
閱讀 824·2019-08-30 15:53
閱讀 3487·2019-08-29 12:43
閱讀 1200·2019-08-29 12:31
閱讀 3093·2019-08-26 13:50
閱讀 803·2019-08-26 13:45
閱讀 996·2019-08-26 10:56