שאלת תם, איך ב node השרת יודע לעצור ולהמתין עד לקבלת תשובה מימות
-
אומרים פה כל הזמן שב node הכי קל לעבוד עם ימות כי אפשר לעשות שב read הוא לא ימשיך עד לקבלת תשובה מימות
אני יודע שבnode יש כזה דבר להגיד לשרת להמתין עד לקבלת תשובה ואני מבין שבפעולה בשרת הוא כל הזמן על הקובץ וממשיך איתה כך שבהתקדמות הוא ממשיך את ה'שיחה' הנוכחית, אבל פה הרי בקבלת תשובה הוא לא ממשיך את הפעולה אלא קורא לשרת מחדש לגמרי, אז איך השרת יודע שהוא זה שאחז פה והוא אוחז בשורה X?
ואיך הוא יודע לחכות לו? הרי זה הדפסה פשוטה ולא פונקצייה מסויימת?תודה רבה למסבירים
@צדיק-תמים -
@שמואל-ש
כי אתה מגדיר שם "await" שזה אומר לשרת להמתין עד שתתקבל תשובה מהפונקצייה, והפונקצייה מתינה עד שהיא תקבל תשובה מימות -
@פיסטוק-פרווה אבל
@שמואל-ש כתב בשאלת תם, איך ב node השרת יודע לעצור ולהמתין עד לקבלת תשובה מימות:
אבל פה הרי בקבלת תשובה הוא לא ממשיך את הפעולה אלא קורא לשרת מחדש לגמרי, אז איך השרת יודע שהוא זה שאחז פה והוא אוחז בשורה X?
-
@שמואל-ש
יש ערכים שנקראים val_1 וכדו'
ועד שלא מתקבלת פקודת ניתוק הם נשמרים -
@פיסטוק-פרווה תוכל להסביר יותר?
-
@שמואל-ש
מתי שהמשתמש מנתק את השיחה נשלח אל השרת ערך שמאפיין את הניתוק, ועד שלא התקבל הערך הזה, אז הערכים שנשלחו נשמרים לפי ה id של השיחה, לדוגמא אם היה id שהוא 12345 אז עד שלא הגיע הערך של ניתוק עם אותו id הנתונים שהוא שלח נשמרים.
ולכן אם זאת שיחה חדשה (id אחר) זה לוקח נתונים מחדש -
@פיסטוק-פרווה דהיינו אפילו שזה קריאה חדשה לגמרי הוא ממשיך מאיפה שאחז בגלל שזה אותו id של השיחה?
והוא יודע גם לפי זה איפה הוא אחז? -
@שמואל-ש
בדיוק. -
@שמואל-ש כתב בשאלת תם, איך ב node השרת יודע לעצור ולהמתין עד לקבלת תשובה מימות:
@פיסטוק-פרווה אבל
@שמואל-ש כתב בשאלת תם, איך ב node השרת יודע לעצור ולהמתין עד לקבלת תשובה מימות:
אבל פה הרי בקבלת תשובה הוא לא ממשיך את הפעולה אלא קורא לשרת מחדש לגמרי, אז איך השרת יודע שהוא זה שאחז פה והוא אוחז בשורה X?
זה הטריק של הספריה. היא מתלבשת על מנגנון הראוטר של אקספרס
בעצם כשכותביםawait call.read
היא מחזיקה את הפונקציה "חיה" בהמתנה (שזה דבר שנוד מעולה בו, כל עניין האסינכרוניות) עד לקבלת בקשה נוספת עם אותו callId, ואז הPromise נפתר עם הערך שהתקבל בקריאה החדשה, והפונקציה ממשיכה בריצה.
וכך מבחינת המפתח אין שום איבוד נתונים, והפונקציה רצה מההתחלה לסוף לפי הסדר.