פעולת try/finally מפריע לcatch שמעליו או לא - nodejs
-
בהמשך לנאמר כאן לגבי ספרית yemot router (nodejs)
הid_list_message בלי פרמטר prepend to next זורק שגיאה
אם אתה לא עושה עליה try catch אז הפונקציה נעצרת והשגיאה מטופלת על ידי הראוטר
אם אתה עושה try catch ולא בודק את סוג השגיאה, זה בעיה
בכללי אין סיבה בדוגמאות שהבאת לעשות try catch כי יש הנדלר גלובלי לשגיאות לא צפויות
אם היה לך נניח קוד שמנסה API אחד ואם הוא נכשל מנסה אחר, זה היה הגיוני, אבל רק מסביב הקוד הספציפי הזה ולא לעטוף את כל הקוד
שזה בעצם אומר שיש try catch מובנים שתופסים את כל השגיאות, אם לא מפריעים להם עם try catch משלנו, האם גם try finally מפריע? האם הcatch הוא זה שתופס את השגיאות וכל עוד הוא לא שם הקוד בטוח, או שעצם הבלוק try תופס שגיאות רק שכיוון שאין catch הוא לא מנתב אותם ולא עושה איתם כלום.
חיפשתי עד כמה שהצלחתי איך עובדות שגיאות בjava script ולא מצאתי מענה על זה, כולם מתעלמים (בצדק לדעתי) מנקודה זו.
אשמח לעזרה בנושא.
-
בהמשך לנאמר כאן לגבי ספרית yemot router (nodejs)
הid_list_message בלי פרמטר prepend to next זורק שגיאה
אם אתה לא עושה עליה try catch אז הפונקציה נעצרת והשגיאה מטופלת על ידי הראוטר
אם אתה עושה try catch ולא בודק את סוג השגיאה, זה בעיה
בכללי אין סיבה בדוגמאות שהבאת לעשות try catch כי יש הנדלר גלובלי לשגיאות לא צפויות
אם היה לך נניח קוד שמנסה API אחד ואם הוא נכשל מנסה אחר, זה היה הגיוני, אבל רק מסביב הקוד הספציפי הזה ולא לעטוף את כל הקוד
שזה בעצם אומר שיש try catch מובנים שתופסים את כל השגיאות, אם לא מפריעים להם עם try catch משלנו, האם גם try finally מפריע? האם הcatch הוא זה שתופס את השגיאות וכל עוד הוא לא שם הקוד בטוח, או שעצם הבלוק try תופס שגיאות רק שכיוון שאין catch הוא לא מנתב אותם ולא עושה איתם כלום.
חיפשתי עד כמה שהצלחתי איך עובדות שגיאות בjava script ולא מצאתי מענה על זה, כולם מתעלמים (בצדק לדעתי) מנקודה זו.
אשמח לעזרה בנושא.
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
עצם הבלוק try תופס שגיאות
כן
אם אתה עושה try finally אתה פשוט בולע את השגיאה
ממליץ על הספר https://hebdevbook.com/product/jsheb/ -
@eido כן, כי אתה זורק את השגיאה שוב מחוץ לבלוק try
רק מה ש try { פה } נתפס
אבל אתה לא אמור להגיע למצב כזה בדרך כלל, כי אתה לא אמור לעטוף קטעי קוד גדולים
בכל מקרה עדיף שתזרוק מחדש בcatch ולא בfinnaly כי אז יש לך את המשתנה של השגיאה לזרוק אותה מחדש -
@eido כן, כי אתה זורק את השגיאה שוב מחוץ לבלוק try
רק מה ש try { פה } נתפס
אבל אתה לא אמור להגיע למצב כזה בדרך כלל, כי אתה לא אמור לעטוף קטעי קוד גדולים
בכל מקרה עדיף שתזרוק מחדש בcatch ולא בfinnaly כי אז יש לך את המשתנה של השגיאה לזרוק אותה מחדש@צדיק-תמים לא, הפעם הוא נקודתי ממש
try { // toDo = await call.read(tempAd, toDo = await call.read([...tempAd,{ type: 'file', data: `/ivr_records/שמיעה1` }], 'tap', {sec_wait: 2, min_digits: 1, typing_playback_mode: "No", digits_allowed: [1, 2, 3, "*0"] }); } finally{ console.log("מסמן כנקראה"); await updateBuyerAds(paramAndAdsContent[indexOfSubscrib].ads.new[i1].adId, call); // console.log(`סימן כנקראה את מודעה ${paramAndAdsContent[indexOfSubscrib].ads.new[i1].adId}`); }פשוט הייתי חייב לסמן מודעה כנקראה גם אם הוא ינתק באמצע. לכן אני לא יכול לוותר עליו.
-
@צדיק-תמים לא, הפעם הוא נקודתי ממש
try { // toDo = await call.read(tempAd, toDo = await call.read([...tempAd,{ type: 'file', data: `/ivr_records/שמיעה1` }], 'tap', {sec_wait: 2, min_digits: 1, typing_playback_mode: "No", digits_allowed: [1, 2, 3, "*0"] }); } finally{ console.log("מסמן כנקראה"); await updateBuyerAds(paramAndAdsContent[indexOfSubscrib].ads.new[i1].adId, call); // console.log(`סימן כנקראה את מודעה ${paramAndAdsContent[indexOfSubscrib].ads.new[i1].adId}`); }פשוט הייתי חייב לסמן מודעה כנקראה גם אם הוא ינתק באמצע. לכן אני לא יכול לוותר עליו.
-
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
פשוט הייתי חייב לסמן מודעה כנקראה גם אם הוא ינתק באמצע.
אז קודם תסמן כנקרא ואז תפעיל read
@צדיק-תמים אבל בread שומעים את המודעה, ואם הוא ינתק לפני הread זה יסומן סתם כנקרא.
-
@צדיק-תמים אבל בread שומעים את המודעה, ואם הוא ינתק לפני הread זה יסומן סתם כנקרא.