[英]How to write an error handling block using try/catch and finally?
我試圖理解我課程中挑戰的結果,但我堅持要通過,因為結果與他們的期望不符。 挑戰任務是:
myError
myErrorName
myErrorMessage
編寫一個finally塊,檢查是否存在myError
。 (myErrorName: myErrorMessage)
我的方法如下:
try{
myVar();
}
catch(err){
var myError = err;
var myErrorName = err.name;
var myErrorMessage = err.message;
}
finally{
if(myError == err){
var result = "There was an error (myErrorName:myErrorMessage)";
}else{
console.log("No error ocurred");
}
}
該代碼有兩個主要問題:
您有一個錯字: var myErro = err;
在myErro
的末尾缺少r
。
您正在嘗試在finally
塊中使用err
,但這僅在catch
塊的范圍內。
...然后還有其他一些與作業似乎不符的地方告訴您要做
您沒有在做#1,而是在做其他事情,巧合的是,這也嘗試使用myVar
您沒有實現#6的任何代碼。
發生錯誤時,代碼分配result
是將myErrorName
和myErrorMessage
逐字放置在字符串中,而不是使用這些變量的值。
當您未發生任何錯誤時,您所收到的消息與他們告訴您使用的消息有所不同,它有細微的差別(包括錯字)。 編程至少部分是關注細節。 :-)
您不需要if (myError == err)
,就if (myError)
可以做到:
try{ myVar(); } catch(err){ var myError = err; var myErrorName = err.name; var myErrorMessage = err.message; } finally{ if(myError){ var result = "There was an error (myErrorName:myErrorMessage)"; console.log(result); }else{ console.log("No error ocurred"); } }
(我添加了console.log
所以我們會看到錯誤情況。)
我在上面只提到了#1和#2,其余的作為練習供您完成。 :-)
我應該指出,我不會那樣寫。 在var
塊中使用在finally
塊中使用的catch
塊中聲明變量確實可以對var
起作用(因為var
不受塊作用域並且是懸掛的),但是這對試圖維護代碼的人產生了誤導。 如果要在這兩個塊中都使用變量,則為了清楚起見,將聲明移到塊外。
選中它會起作用
try{
console.log(myVar);
}
catch(err){
var myError = err;
var myErrorName = err.name;
var myErrorMessage = err.message;
}
finally{
if(myError){
var result = "There was an error ("+ myErrorName+": "+myErrorMessage+")";
}else{
result = "No error ocurred";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.