@yossiz אמר בjs throw false:
בעצם @dovid ו @magicode המליצו מאוד על משהו, מה לא טוב בפתרון שלהם?
הנקודה היא פשוטה הפיתרון שהציעו לי כאן
https://tchumim.com/post/59303
היא לטעמי רחוקה ממה שאני צריך.
כי אני מבצע פעולות רבות לפי הנתונים שהמאזין הקיש
אני עושה כאן דוגמא בסיסית אבל שמשקפת מאוד חזק את צורת העבודה שלי:
let name = read(req, res, 'f-הקלט את שמך', 'name', VOICE);
let status = read(req, res, 't-בחר את הסטטוס האישי, לבחור הקש אחד לאברך הקש שתיים לתתלמיד חיידר הקש שלוש', 'status', MENU + '12');
if (status === '1'){
let yeshiva = read(req, res, 't-הקלט את שם הישיבה ולסיום הקש סולמית', 'yeshiva', VOICE);
database.insertSQL({'name' : name,'yeshiva' : yeshiva}, 'bachurim').then(id => {
say('t-נרשמת בהצלחה המספר האישי שלך הינו.n-' + id);
})
}else if (status === '2'){
let isuk = read(req, res, 't-אברך כולל הקש אחד, נהנה מיגיע כפיו הקש שתיים', 'isuk', MENU + '12');
let data = {'name' : name, 'isuk' : isuk};
if (isuk === '1'){
data['kolel'] = read(req, res, 't-הקלט את שם הכולל ולסיום סולמית', 'kolel', VOICE);
}else if (isuk === '2'){
data['work'] = read(req, res, 't-הקלט את שם מקום העבודה', 'work', VOICE);
}
database.insertSQL(data, 'avrechim').then(id => {
say('t-נרשמת בהצלחה המספר האישי שלך הינו.n-' + id);
})
}else if (status === '3'){
//...
}
בקוד ניתן לראות ראשית למה חשוב לי לכתוב את המשתנים בזה אחר זה לפי הסדא שאני צריך אותם ולא בתוך לולאה.
ומצד שני ניתן לראות למה חשוב שהפונקציה read תסיים את ריצת המשך הקוד, כי כפי שזה בנוי בימות המשיח בקריאה הראשונה אין לי שום ערך, ואז אני נתן פקודה לימות שייתן לי ערך name ובקריאה השניה כבר יש לי את הname ואז אני צריך את הסטטוס האישי ולאחר מכן נתונים לפי התנאים.
אם הקוד לא יעצור, השרת ימשיך את הקוד ואז ינסה להכניס לד"ב את הרישום למרות שהפרטים שם הם undefined וזה ייכשל ויגרום לשגיאה או לרישום לא נכון.
בPHP לעומת זאת זה היה מאוד פשוט, כאשר ה read מקבל ערך שהוא לא קיים והוא דורש מימות המשיח להחזיר את הערך, אז עושים exit() וחסל, השרת סיים לעבוד כעת.
ב nodejs נתקעתי, כי השרת כן ממשיך.
אז יש פיתרון, לעשות כך:
let yeshiva = read(req, res, 't-הקלט את שם הישיבה ולסיום הקש סולמית', 'yeshiva', VOICE);
if (typeof yeshiva !== 'string'){
return false;
}
database.insertSQL({'name' : name,'yeshiva' : yeshiva}, 'bachurim').then(id => {
say('t-נרשמת בהצלחה המספר האישי שלך הינו.n-' + id);
})
(אני יודע שניתן גם לעשות אחרת:
let yeshiva = read(req, res, 't-הקלט את שם הישיבה ולסיום הקש סולמית', 'yeshiva', VOICE);
if (typeof yeshiva === 'string'){
database.insertSQL({'name' : name,'yeshiva' : yeshiva}, 'bachurim').then(id => {
say('t-נרשמת בהצלחה המספר האישי שלך הינו.n-' + id);
})
}
אבל אז יש יכול להיווצר מידי הרבה הזחות, ולפעמים על כלום כמו בדוגמא כאן:
https://tchumim.com/post/59315
ולכן יותר קל לעשות תנאי שעוצר מאשר תנאי להמשיך)
ולמעשה הפיתרון מסרבל, כי זה מוסיף שורות קוד מיותרות ולא תמיד אני זוכר להשים אותו, והיה לי כבר בעיה במערכת של תרומות שאספתי נתונים ובצעתי חיוב מול שרת API של חברת סליקה, ושכחתי להשים return false והחיוב בוצע מיד לאחר קליטת נתון הCVV לפני מספר התשלומים (בעצם זה ביצע כל פעם ניסון חיוב, רק שהוא נכשל מצד חברת האשראי, אך מספר התשלומים שהינו אופצינאלי כבר לא היה מעכב, וזה בוצע כעיסקא בתשלום אחד).
ולכן אני כן רוצה משהו שמזכיר את ה exit של PHP.
וכאן מצאתי פתאום את הפתרון של ה throw false.
ולכן חשוב לדעת האם באן שהוא אני ימצא את עצמי שזה לא תיקני ולא טוב.