פעולת 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 ולא מצאתי מענה על זה, כולם מתעלמים (בצדק לדעתי) מנקודה זו.
אשמח לעזרה בנושא.
@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 זה יסומן סתם כנקרא.
-
@eido אני לא רואה שאתה בודק כמה זמן עבר, הוא יכול לנתק רגע אחרי שהחזרת את התגובה לימות
בכל אופן יש על מקרה כזה תיעוד מפורט
https://github.com/ShlomoCode/yemot-router2#הרצת-קוד-לאחר-החזרת-תשובה-למחייגכבר שלחתי לך אותו בעבר
@צדיק-תמים כן, אני משתמש בזה מאז.
לא כ"כ הבנתי, אני לא צריך לבדוק כמה זמן עבר, מבחינתי ברגע שפקודת ההשמעה נשלחה לימות המשיח - הוא שמע את המודעה ואני מסמן אותה כנקראה, אני לא צריך לבדוק אם עבר מספיק זמן בשביל שהוא ישמע את זה.
אני לא יכול להשתמש שם בקומבינה של הרצת קוד לאחר החזרת תשובה למחייג בגלל שהמערכת לא בנויה מראש בשביל שישמע וינתק או שישמע מודעה והמערכת תוציא אותו, הוא שומע את המודעות כסדר (לכן זה read ולאid_list_message) ויש לו על זה תפריט, רק צריך לחשוב גם על מקרה שינתק באמצע. לכן שמתי בfinally.
או שלא הבנתי משהו נכון?
-
@צדיק-תמים כן, אני משתמש בזה מאז.
לא כ"כ הבנתי, אני לא צריך לבדוק כמה זמן עבר, מבחינתי ברגע שפקודת ההשמעה נשלחה לימות המשיח - הוא שמע את המודעה ואני מסמן אותה כנקראה, אני לא צריך לבדוק אם עבר מספיק זמן בשביל שהוא ישמע את זה.
אני לא יכול להשתמש שם בקומבינה של הרצת קוד לאחר החזרת תשובה למחייג בגלל שהמערכת לא בנויה מראש בשביל שישמע וינתק או שישמע מודעה והמערכת תוציא אותו, הוא שומע את המודעות כסדר (לכן זה read ולאid_list_message) ויש לו על זה תפריט, רק צריך לחשוב גם על מקרה שינתק באמצע. לכן שמתי בfinally.
או שלא הבנתי משהו נכון?
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
לא כ"כ הבנתי, אני לא צריך לבדוק כמה זמן עבר, מבחינתי ברגע שפקודת ההשמעה נשלחה לימות המשיח - הוא שמע את המודעה ואני מסמן אותה כנקראה
אז אתה יכול כבר לסמן לפני ששלחת את התגובה, אין משמעות לכמה אלפיות שניה שהקוד מחזיר את התגובה
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
אני לא יכול להשתמש שם בקומבינה של הרצת קוד לאחר החזרת תשובה למחייג בגלל שהמערכת לא בנויה מראש בשביל שישמע וינתק או שישמע מודעה והמערכת תוציא אותו, הוא שומע את המודעות כסדר (לכן זה read ולאid_list_message) ויש לו על זה תפריט, רק צריך לחשוב גם על מקרה שינתק באמצע. לכן שמתי בfinally.
לא הבנתי כלום
-
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
לא כ"כ הבנתי, אני לא צריך לבדוק כמה זמן עבר, מבחינתי ברגע שפקודת ההשמעה נשלחה לימות המשיח - הוא שמע את המודעה ואני מסמן אותה כנקראה
אז אתה יכול כבר לסמן לפני ששלחת את התגובה, אין משמעות לכמה אלפיות שניה שהקוד מחזיר את התגובה
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
אני לא יכול להשתמש שם בקומבינה של הרצת קוד לאחר החזרת תשובה למחייג בגלל שהמערכת לא בנויה מראש בשביל שישמע וינתק או שישמע מודעה והמערכת תוציא אותו, הוא שומע את המודעות כסדר (לכן זה read ולאid_list_message) ויש לו על זה תפריט, רק צריך לחשוב גם על מקרה שינתק באמצע. לכן שמתי בfinally.
לא הבנתי כלום
@צדיק-תמים כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
לא כ"כ הבנתי, אני לא צריך לבדוק כמה זמן עבר, מבחינתי ברגע שפקודת ההשמעה נשלחה לימות המשיח - הוא שמע את המודעה ואני מסמן אותה כנקראה
אז אתה יכול כבר לסמן לפני ששלחת את התגובה, אין משמעות לכמה אלפיות שניה שהקוד מחזיר את התגובה
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
אני לא יכול להשתמש שם בקומבינה של הרצת קוד לאחר החזרת תשובה למחייג בגלל שהמערכת לא בנויה מראש בשביל שישמע וינתק או שישמע מודעה והמערכת תוציא אותו, הוא שומע את המודעות כסדר (לכן זה read ולאid_list_message) ויש לו על זה תפריט, רק צריך לחשוב גם על מקרה שינתק באמצע. לכן שמתי בfinally.
לא הבנתי כלום
הקומבינה של הרצת קוד לאחר החזרת תשובה למשתמש, נצרכת אם עושים call.id_list_message, כי אז הקוד גומר את פעלותו ומה שאחריו - סימון המודעה - לא מתבצע. אבל כאן אני לא משתמש בזה אלא בcall.read והקוד אמור להמשיך לרוץ ככה שאם לא יהיו בעיות הקוד אמור לרוץ, כל מה שאני עושה finally זה למקרה שהמחייג ינתק.
מקוה שהייתי מובן הפעם.
-
@צדיק-תמים כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
לא כ"כ הבנתי, אני לא צריך לבדוק כמה זמן עבר, מבחינתי ברגע שפקודת ההשמעה נשלחה לימות המשיח - הוא שמע את המודעה ואני מסמן אותה כנקראה
אז אתה יכול כבר לסמן לפני ששלחת את התגובה, אין משמעות לכמה אלפיות שניה שהקוד מחזיר את התגובה
@eido כתב בפעולת try/finally מפריע לcatch שמעליו או לא - nodejs:
אני לא יכול להשתמש שם בקומבינה של הרצת קוד לאחר החזרת תשובה למחייג בגלל שהמערכת לא בנויה מראש בשביל שישמע וינתק או שישמע מודעה והמערכת תוציא אותו, הוא שומע את המודעות כסדר (לכן זה read ולאid_list_message) ויש לו על זה תפריט, רק צריך לחשוב גם על מקרה שינתק באמצע. לכן שמתי בfinally.
לא הבנתי כלום
הקומבינה של הרצת קוד לאחר החזרת תשובה למשתמש, נצרכת אם עושים call.id_list_message, כי אז הקוד גומר את פעלותו ומה שאחריו - סימון המודעה - לא מתבצע. אבל כאן אני לא משתמש בזה אלא בcall.read והקוד אמור להמשיך לרוץ ככה שאם לא יהיו בעיות הקוד אמור לרוץ, כל מה שאני עושה finally זה למקרה שהמחייג ינתק.
מקוה שהייתי מובן הפעם.