דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איך עובד קוד אסינכרוני בJS?

איך עובד קוד אסינכרוני בJS?

מתוזמן נעוץ נעול הועבר תכנות
35 פוסטים 5 כותבים 940 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • yossizY yossiz

    @dovid אמר באיך עובד קוד אסינכרוני בJS?:

    כל הקוד בJS הוא תמיד תמיד סינכרוני - כל שורה מתבצעת רק אחרי שזו שלפניה סיימה.
    אין שום דרך לעקוף את ההתנהגות הזאת.

    כל קוד אחר בJS הוא כן blocking

    כל הנ"ל נכון גם כלפי GO. כל הקוד הוא blocking (בקונטקסט של ה-thread הנוכחי) למעט מקרה מאוד מסויים אחד... קריאה לפונקציה על ידי מילת המפתח go.
    לכן לא הבנתי לגמרי את הדרשה שלך...

    עריכה: אחרי מחשבה הבנתי את הנקודה שלך.

    כל הקוד בJS הוא תמיד תמיד סינכרוני - כל שורה מתבצעת רק אחרי שזו שלפניה סיימה.

    זה נכון גם בגו, אבל אתה מתכוון להגיד שב-JS אין מקביליות או אפילו מצג מדומה של מקביליות. משא"כ בגו אתה רואה את התוצאות של הקוד משולבות אחד עם השני כאילו הם קורים במקביל (וזה גם במקרה של thread פיזי אחד, כי ה-runtime יכול לעצור thread לוגי בכל מקום שנוח לו ולעבור ל-thread לוגי אחר בתוך אותו thread פיזי). אבל ב-JS עד שאתה מסיים פעולה, סביבת ההרצה לא יכולה לעבור לפעולה אחרת.

    @nigun אם אתה רוצה להבין טוב את הנושא לך תלמד על ה-event loop ב-JS. דבר שלא קיים בגו.

    dovidD מנותק
    dovidD מנותק
    dovid
    ניהול
    כתב ב נערך לאחרונה על ידי
    #5

    @yossiz ההבהרה שלך לדברי אכן מדוייקת מצד עצמה, בזכות מילת מפתח אחת GO היא עולם אחר לחלוטין, ובJS אין את המילה הזו ואת ההשפעה שלה.
    אבל אני בכלל לא השוואתי לGO, כתבתי א' ב' בJS כמו למישהו שלא יודע כלום, כי לדעתי בדיוק ככה יש לגשת לעניין. לא צריך לדעת GO (שלדעתי יש בפורום שלנו את היחיד בעולם שמכיר אותה ולא את JS) וגם לא event loop (זה מצויין לשיעורי העשרה, מרחיב אופקים, מעמיק הבנה, אבל לא נחוץ ואף מזיק לשלב זה של השאלה לדעתי).

    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
    תגובה 1 תגובה אחרונה
    3
    • yossizY yossiz

      @dovid אמר באיך עובד קוד אסינכרוני בJS?:

      כל הקוד בJS הוא תמיד תמיד סינכרוני - כל שורה מתבצעת רק אחרי שזו שלפניה סיימה.
      אין שום דרך לעקוף את ההתנהגות הזאת.

      כל קוד אחר בJS הוא כן blocking

      כל הנ"ל נכון גם כלפי GO. כל הקוד הוא blocking (בקונטקסט של ה-thread הנוכחי) למעט מקרה מאוד מסויים אחד... קריאה לפונקציה על ידי מילת המפתח go.
      לכן לא הבנתי לגמרי את הדרשה שלך...

      עריכה: אחרי מחשבה הבנתי את הנקודה שלך.

      כל הקוד בJS הוא תמיד תמיד סינכרוני - כל שורה מתבצעת רק אחרי שזו שלפניה סיימה.

      זה נכון גם בגו, אבל אתה מתכוון להגיד שב-JS אין מקביליות או אפילו מצג מדומה של מקביליות. משא"כ בגו אתה רואה את התוצאות של הקוד משולבות אחד עם השני כאילו הם קורים במקביל (וזה גם במקרה של thread פיזי אחד, כי ה-runtime יכול לעצור thread לוגי בכל מקום שנוח לו ולעבור ל-thread לוגי אחר בתוך אותו thread פיזי). אבל ב-JS עד שאתה מסיים פעולה, סביבת ההרצה לא יכולה לעבור לפעולה אחרת.

      @nigun אם אתה רוצה להבין טוב את הנושא לך תלמד על ה-event loop ב-JS. דבר שלא קיים בגו.

      dovidD מנותק
      dovidD מנותק
      dovid
      ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #6

      @yossiz בשביל להסביר את הקונטקסט שלי לגמרי שים לב שבבסיסה השאלה הייתה קיימת כש@nigun הכיר רק את PHP.
      המשפט "כל קוד אחר בJS הוא כן blocking" מכוון בעיקר לשם, כלומר "זה בדיוק אותו דבר כמו PHP".
      כמו"כ המילה "אחר" היא למעשה מטעה, כי זה כפי שאמרת כל ללא שום מיעוט. אלא שאחר נדרש פה בגלל שזה לאפוקי הפעולות שמבוצעות דה פקטו ע"י JS במסגרת המתודות האמורות לעיל, למשל הפעולות של הרשת במקרה של הXMLHttpRequest למשל.

      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      nigunN תגובה 1 תגובה אחרונה
      3
      • dovidD dovid

        @yossiz בשביל להסביר את הקונטקסט שלי לגמרי שים לב שבבסיסה השאלה הייתה קיימת כש@nigun הכיר רק את PHP.
        המשפט "כל קוד אחר בJS הוא כן blocking" מכוון בעיקר לשם, כלומר "זה בדיוק אותו דבר כמו PHP".
        כמו"כ המילה "אחר" היא למעשה מטעה, כי זה כפי שאמרת כל ללא שום מיעוט. אלא שאחר נדרש פה בגלל שזה לאפוקי הפעולות שמבוצעות דה פקטו ע"י JS במסגרת המתודות האמורות לעיל, למשל הפעולות של הרשת במקרה של הXMLHttpRequest למשל.

        nigunN מנותק
        nigunN מנותק
        nigun
        כתב ב נערך לאחרונה על ידי
        #7

        @dovid
        אם אני משווה את זה לPHP, אז בPHP אפשר לקרוא לפקודה חיצונית דרך exec
        ולשים && בסוף ולא לחכות לתוצאה.

        אבל בשונה מPHP, בJS אפשר לקבל את התוצאה מהפקודה האסינכרונית בהמשך הסקירפט.
        הבנתי נכון או שיש כאן עוד קטע?

        מייל: nigun@duck.com

        dovidD תגובה 1 תגובה אחרונה
        0
        • nigunN nigun

          @dovid
          אם אני משווה את זה לPHP, אז בPHP אפשר לקרוא לפקודה חיצונית דרך exec
          ולשים && בסוף ולא לחכות לתוצאה.

          אבל בשונה מPHP, בJS אפשר לקבל את התוצאה מהפקודה האסינכרונית בהמשך הסקירפט.
          הבנתי נכון או שיש כאן עוד קטע?

          dovidD מנותק
          dovidD מנותק
          dovid
          ניהול
          כתב ב נערך לאחרונה על ידי
          #8

          @nigun לא, זה לא דומה לexec. זה פשוט תזמון פעולות לאחרי שיקרה דברים.
          קח דוגמא את הקוד הזה בPHP:

          <?php
          $website_page = file_get_contents('http://www.google.com/');
          echo $website_page ;
          ?>
          

          אם יהפכו את PHP להיות כמו JS אז הקוד ייראה ככה:

          <?php
          file_get_contents_with_callback('http://www.example.com/', function ($website_page ) {
                      echo $website_page;
                  });
          echo "Below the google page content: <br>";
          ?>
          
          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
          nigunN תגובה 1 תגובה אחרונה
          2
          • dovidD dovid

            @nigun לא, זה לא דומה לexec. זה פשוט תזמון פעולות לאחרי שיקרה דברים.
            קח דוגמא את הקוד הזה בPHP:

            <?php
            $website_page = file_get_contents('http://www.google.com/');
            echo $website_page ;
            ?>
            

            אם יהפכו את PHP להיות כמו JS אז הקוד ייראה ככה:

            <?php
            file_get_contents_with_callback('http://www.example.com/', function ($website_page ) {
                        echo $website_page;
                    });
            echo "Below the google page content: <br>";
            ?>
            
            nigunN מנותק
            nigunN מנותק
            nigun
            כתב ב נערך לאחרונה על ידי
            #9

            @dovid
            ומה יקרה אם אני לא יכניס אותו לקולבאק?
            ומה קורה אם אני רוצה לקבל ערכים (int) ממספר כתבות
            ולעשות sum על כולם?

            מייל: nigun@duck.com

            dovidD תגובה 1 תגובה אחרונה
            0
            • nigunN nigun

              @dovid
              ומה יקרה אם אני לא יכניס אותו לקולבאק?
              ומה קורה אם אני רוצה לקבל ערכים (int) ממספר כתבות
              ולעשות sum על כולם?

              dovidD מנותק
              dovidD מנותק
              dovid
              ניהול
              כתב ב נערך לאחרונה על ידי dovid
              #10

              @nigun אמר באיך עובד קוד אסינכרוני בJS?:

              @dovid
              ומה יקרה אם אני לא יכניס אותו לקולבאק?

              לא הבנתי. אם לא יהיה בקוד בקאלבק, אז לא יהיה קוד. עדיין הקובץ יירד אבל זה יהיה קצת לא שמיש...

              ומה קורה אם אני רוצה לקבל ערכים (int) ממספר כתבות
              ולעשות sum על כולם?

              אם אתה רוצה כמה כתובות ולעשות משהו מכולם יחד אתה אכן באתגר, כי הרי לכל אחד יש הקשר עצמאי לחלוטין.
              בשביל אתגרים כאלה ואחרים עשו את Promise, אבל גם לפני Promise אתה יכול לחשוב על רעיונות פשוטים (למשל: אתה מכין משתנה לסיכום הערכים, ומשתנה נוסף שסופר כמה כתובות בוצעו. בכל קאלבק אתה גם מוסיף את התוצאה לסיכום וגם מפחית את הערך של המונה ב1, וגם בודק אם נשאר עוד כתובות להורדה. ברגע שהתשובה שלילית אתה יכול לבצע את הפעולה הסופית שרצית לעשות עם הסיכום הכולל).
              היה מחלקה מפורסמת בשם async שעשתה הרבה דברים שקשורים לאתגרים הללו שמציב האופי הקאלבקי. כיום Promise פותר את רובם בוצרה קלה מאוד.

              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              nigunN תגובה 1 תגובה אחרונה
              3
              • dovidD dovid

                @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                @dovid
                ומה יקרה אם אני לא יכניס אותו לקולבאק?

                לא הבנתי. אם לא יהיה בקוד בקאלבק, אז לא יהיה קוד. עדיין הקובץ יירד אבל זה יהיה קצת לא שמיש...

                ומה קורה אם אני רוצה לקבל ערכים (int) ממספר כתבות
                ולעשות sum על כולם?

                אם אתה רוצה כמה כתובות ולעשות משהו מכולם יחד אתה אכן באתגר, כי הרי לכל אחד יש הקשר עצמאי לחלוטין.
                בשביל אתגרים כאלה ואחרים עשו את Promise, אבל גם לפני Promise אתה יכול לחשוב על רעיונות פשוטים (למשל: אתה מכין משתנה לסיכום הערכים, ומשתנה נוסף שסופר כמה כתובות בוצעו. בכל קאלבק אתה גם מוסיף את התוצאה לסיכום וגם מפחית את הערך של המונה ב1, וגם בודק אם נשאר עוד כתובות להורדה. ברגע שהתשובה שלילית אתה יכול לבצע את הפעולה הסופית שרצית לעשות עם הסיכום הכולל).
                היה מחלקה מפורסמת בשם async שעשתה הרבה דברים שקשורים לאתגרים הללו שמציב האופי הקאלבקי. כיום Promise פותר את רובם בוצרה קלה מאוד.

                nigunN מנותק
                nigunN מנותק
                nigun
                כתב ב נערך לאחרונה על ידי
                #11

                @dovid
                שוטטי קצת ברחבי הרשת להבין מה זה Promise
                וזה מה שהבנתי:
                הPromise שומר את הערך במשתנה בזיכרון (או אולי מערך)
                ואז אפשר לגשת למשתנה הנ"ל מכל מקום בקוד ולבדוק את הערך.

                ואם אני מדגים את זה בגו

                var x string
                go func(){
                x = "foo"
                time.Sleep(200 * time.Millisecond)
                }()
                
                time.Sleep(100 * time.Millisecond)
                		fmt.Println(x)
                
                

                כאן אני יוצר את המשתנה X מכניס לו ערך
                ושולף אותו בכל מקום שאני רוצה.

                אמנם Promise קצת יותר משוכלל
                והוא מכיל סוג של מערך של משתנים, האם הפעולה בוצעה וכו'

                הבנתי נכון?

                מייל: nigun@duck.com

                yossizY א 2 תגובות תגובה אחרונה
                0
                • nigunN nigun

                  @dovid
                  שוטטי קצת ברחבי הרשת להבין מה זה Promise
                  וזה מה שהבנתי:
                  הPromise שומר את הערך במשתנה בזיכרון (או אולי מערך)
                  ואז אפשר לגשת למשתנה הנ"ל מכל מקום בקוד ולבדוק את הערך.

                  ואם אני מדגים את זה בגו

                  var x string
                  go func(){
                  x = "foo"
                  time.Sleep(200 * time.Millisecond)
                  }()
                  
                  time.Sleep(100 * time.Millisecond)
                  		fmt.Println(x)
                  
                  

                  כאן אני יוצר את המשתנה X מכניס לו ערך
                  ושולף אותו בכל מקום שאני רוצה.

                  אמנם Promise קצת יותר משוכלל
                  והוא מכיל סוג של מערך של משתנים, האם הפעולה בוצעה וכו'

                  הבנתי נכון?

                  yossizY מנותק
                  yossizY מנותק
                  yossiz
                  כתב ב נערך לאחרונה על ידי yossiz
                  #12

                  @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                  הבנתי נכון?

                  לא.

                  פרומיסים באו לעולם כדי לתת תחביר יותר נוח ל-callback-ים השנואים.

                  לדעתי הסדר הנכון להבין טוב את הענין הוא כך:
                  א) תבין למה צריך callback-ים ב-JS.
                  ב) תבין למה אנשים מדברים בכזו שנאה כלפי callback-ים (או שזה כבר מובן מאליו...)
                  ג) תלמד איך פרומיסים פתרו את הבעיה.
                  ד) תלמד איך התחביר של async await מוסיף כמות עצומה של סוכר.

                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                  nigunN תגובה 1 תגובה אחרונה
                  1
                  • nigunN nigun

                    @dovid
                    שוטטי קצת ברחבי הרשת להבין מה זה Promise
                    וזה מה שהבנתי:
                    הPromise שומר את הערך במשתנה בזיכרון (או אולי מערך)
                    ואז אפשר לגשת למשתנה הנ"ל מכל מקום בקוד ולבדוק את הערך.

                    ואם אני מדגים את זה בגו

                    var x string
                    go func(){
                    x = "foo"
                    time.Sleep(200 * time.Millisecond)
                    }()
                    
                    time.Sleep(100 * time.Millisecond)
                    		fmt.Println(x)
                    
                    

                    כאן אני יוצר את המשתנה X מכניס לו ערך
                    ושולף אותו בכל מקום שאני רוצה.

                    אמנם Promise קצת יותר משוכלל
                    והוא מכיל סוג של מערך של משתנים, האם הפעולה בוצעה וכו'

                    הבנתי נכון?

                    א מנותק
                    א מנותק
                    אהרן
                    כתב ב נערך לאחרונה על ידי
                    #13

                    @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                    הבנתי נכון?

                    Promise בא לתת מענה על התנהגות אותה הגדרת "לא הבנתי"
                    ועוד לפני ששמענו אם הבנת את ההסבר
                    נדלקת על מושג חדש ששמעת
                    אז הנה אתרום גם את חלקי
                    יש גם await שזו שיכבה עליונה יותר
                    ויש עוד כמה שהאחרונה מהם הם הפיקסלים על המסך..

                    nigunN תגובה 1 תגובה אחרונה
                    0
                    • yossizY yossiz

                      @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                      הבנתי נכון?

                      לא.

                      פרומיסים באו לעולם כדי לתת תחביר יותר נוח ל-callback-ים השנואים.

                      לדעתי הסדר הנכון להבין טוב את הענין הוא כך:
                      א) תבין למה צריך callback-ים ב-JS.
                      ב) תבין למה אנשים מדברים בכזו שנאה כלפי callback-ים (או שזה כבר מובן מאליו...)
                      ג) תלמד איך פרומיסים פתרו את הבעיה.
                      ד) תלמד איך התחביר של async await מוסיף כמות עצומה של סוכר.

                      nigunN מנותק
                      nigunN מנותק
                      nigun
                      כתב ב נערך לאחרונה על ידי
                      #14

                      @yossiz
                      נתחיל ממה שהבנתי מה זה callback
                      בJS הדרך לנהל את התוצאה שמתקבל מבקשת HTTP (למשל)
                      היא לעשות פונקציה בתוך פונקציה
                      וכך אנחנו תופסים את התגובה, בלי שהיא "תברח" לנו

                      מכיוון שלפעמים צריך לכתוב כמה callback-ים אחד בתוך השני
                      זה מסבך את העניינים (גהנום בלע"ז).

                      לכן הוסיפו את פרומיס ושות'
                      שינהלו את זה בצורה שונה.

                      עכשיו הבנתי נכון? (אני מנחש שלא👶 )

                      מייל: nigun@duck.com

                      א yossizY 2 תגובות תגובה אחרונה
                      1
                      • nigunN nigun

                        @yossiz
                        נתחיל ממה שהבנתי מה זה callback
                        בJS הדרך לנהל את התוצאה שמתקבל מבקשת HTTP (למשל)
                        היא לעשות פונקציה בתוך פונקציה
                        וכך אנחנו תופסים את התגובה, בלי שהיא "תברח" לנו

                        מכיוון שלפעמים צריך לכתוב כמה callback-ים אחד בתוך השני
                        זה מסבך את העניינים (גהנום בלע"ז).

                        לכן הוסיפו את פרומיס ושות'
                        שינהלו את זה בצורה שונה.

                        עכשיו הבנתי נכון? (אני מנחש שלא👶 )

                        א מנותק
                        א מנותק
                        אהרן
                        כתב ב נערך לאחרונה על ידי
                        #15

                        @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                        עכשיו הבנתי נכון? (אני מנחש שלא )

                        כן.

                        אבל המושג "צורה שונה" סתמי מדי.

                        יש אתגר ופתרון
                        הבנת את האתגר? הבנת את הפתרון? הוא נראה לך הגיוני?

                        תגובה 1 תגובה אחרונה
                        0
                        • nigunN nigun

                          לפני כשנה כשהייתי בPHP ניסתי ללמוד נוד
                          אבל לא הצלחתי לקלוט את הקטע של קוד אסינכרוני
                          עכשיו אחרי שהבנתי את הרעיון בGO אני מנסה לחזור ולהבין את נוד
                          אבל כנראה אני קשה הבנה , כי אני לא מתליח לקלוט את הנקודה.

                          ברשותכם אני יביא קוד אסינכרוני בGO
                          ואתה תגידו לי איך זה נראה בנוד
                          ואולי אני יבין?

                          בא נתחיל עם משהו בסיסי (לא מצאתי משהו יותר פשוט)

                          package main
                          
                          import (
                          	"fmt"
                          	"time"
                          )
                          
                          func say(s string) {
                          	for i := 0; i < 5; i++ {
                          		time.Sleep(100 * time.Millisecond)
                          		fmt.Println(s)
                          	}
                          }
                          
                          func main() {
                          	go say("world")
                          	say("hello")
                          }
                          

                          (אני לא צריך קוד בJS שיעשה בדיוק אותו דבר
                          רק להבין את הרעיון)

                          א מנותק
                          א מנותק
                          אהרן
                          כתב ב נערך לאחרונה על ידי
                          #16

                          @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                          לפני כשנה כשהייתי בPHP ניסתי ללמוד נוד
                          אבל לא הצלחתי לקלוט את הקטע של קוד אסינכרוני
                          עכשיו אחרי שהבנתי את הרעיון בGO אני מנסה לחזור ולהבין את נוד
                          אבל כנראה אני קשה הבנה , כי אני לא מתליח לקלוט את הנקודה.

                          ברשותכם אני יביא קוד אסינכרוני בGO
                          ואתה תגידו לי איך זה נראה בנוד
                          ואולי אני יבין?

                          בא נתחיל עם משהו בסיסי (לא מצאתי משהו יותר פשוט)

                          package main
                          
                          import (
                          	"fmt"
                          	"time"
                          )
                          
                          func say(s string) {
                          	for i := 0; i < 5; i++ {
                          		time.Sleep(100 * time.Millisecond)
                          		fmt.Println(s)
                          	}
                          }
                          
                          func main() {
                          	go say("world")
                          	say("hello")
                          }
                          

                          (אני לא צריך קוד בJS שיעשה בדיוק אותו דבר
                          רק להבין את הרעיון)

                          הבאת דוגמא של Println, ואז אתה שואל על שמירת התוצאה
                          תן לנו דוגמא איך ב-go אתה שומר את התשובות שמתקבלות מהפונקציות הא-סינכרוניות, יהיה יותר קל להסביר עם "דוגמא דומה".

                          nigunN תגובה 1 תגובה אחרונה
                          0
                          • א אהרן

                            @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                            הבנתי נכון?

                            Promise בא לתת מענה על התנהגות אותה הגדרת "לא הבנתי"
                            ועוד לפני ששמענו אם הבנת את ההסבר
                            נדלקת על מושג חדש ששמעת
                            אז הנה אתרום גם את חלקי
                            יש גם await שזו שיכבה עליונה יותר
                            ויש עוד כמה שהאחרונה מהם הם הפיקסלים על המסך..

                            nigunN מנותק
                            nigunN מנותק
                            nigun
                            כתב ב נערך לאחרונה על ידי
                            #17

                            @אהרן
                            אני מקווה שאני לא משגע כאן את הציבור
                            אבל לי יש הרגלי למידה מוזרים
                            ואני לומד דברים מהאמצע, ואז חוזר לבסיס.

                            זה לא בגלל שזו דרך חכמה
                            אלא בגלל שיש לי נכות שאני לא מצליח ללמוד דברים שמשעממים אותי
                            אז אני לוקח את העניין של "ליבו חפץ" בהידור, ולומד רק מה שליבי חפץ.

                            ללמוד JS לפי הסדר משעמם אותי ברמות אני לא מצליח לשבת על מדריך יותר מכמה דקות
                            אז הפתרון שלי הוא לקפוץ ישר לדברים המעניינים
                            ומתוך זה להגיע ליסודות הבסיסיים.

                            מייל: nigun@duck.com

                            תגובה 1 תגובה אחרונה
                            0
                            • א אהרן

                              @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                              לפני כשנה כשהייתי בPHP ניסתי ללמוד נוד
                              אבל לא הצלחתי לקלוט את הקטע של קוד אסינכרוני
                              עכשיו אחרי שהבנתי את הרעיון בGO אני מנסה לחזור ולהבין את נוד
                              אבל כנראה אני קשה הבנה , כי אני לא מתליח לקלוט את הנקודה.

                              ברשותכם אני יביא קוד אסינכרוני בGO
                              ואתה תגידו לי איך זה נראה בנוד
                              ואולי אני יבין?

                              בא נתחיל עם משהו בסיסי (לא מצאתי משהו יותר פשוט)

                              package main
                              
                              import (
                              	"fmt"
                              	"time"
                              )
                              
                              func say(s string) {
                              	for i := 0; i < 5; i++ {
                              		time.Sleep(100 * time.Millisecond)
                              		fmt.Println(s)
                              	}
                              }
                              
                              func main() {
                              	go say("world")
                              	say("hello")
                              }
                              

                              (אני לא צריך קוד בJS שיעשה בדיוק אותו דבר
                              רק להבין את הרעיון)

                              הבאת דוגמא של Println, ואז אתה שואל על שמירת התוצאה
                              תן לנו דוגמא איך ב-go אתה שומר את התשובות שמתקבלות מהפונקציות הא-סינכרוניות, יהיה יותר קל להסביר עם "דוגמא דומה".

                              nigunN מנותק
                              nigunN מנותק
                              nigun
                              כתב ב נערך לאחרונה על ידי
                              #18

                              @אהרן אמר באיך עובד קוד אסינכרוני בJS?:

                              הבאת דוגמא של Println, ואז אתה שואל על שמירת התוצאה
                              תן לנו דוגמא איך ב-go אתה שומר את התשובות שמתקבלות מהפונקציות הא-סינכרוניות, יהיה יותר קל להסביר עם "דוגמא דומה".

                              מה הכוונה "שומר"
                              כשאני אומר שומר אני מתכוון לכל שימוש בערך
                              זה יכול להיות הדפסה,שמירה במסד נתונים או כל שימוש אחר.

                              מייל: nigun@duck.com

                              א תגובה 1 תגובה אחרונה
                              0
                              • nigunN nigun

                                @אהרן אמר באיך עובד קוד אסינכרוני בJS?:

                                הבאת דוגמא של Println, ואז אתה שואל על שמירת התוצאה
                                תן לנו דוגמא איך ב-go אתה שומר את התשובות שמתקבלות מהפונקציות הא-סינכרוניות, יהיה יותר קל להסביר עם "דוגמא דומה".

                                מה הכוונה "שומר"
                                כשאני אומר שומר אני מתכוון לכל שימוש בערך
                                זה יכול להיות הדפסה,שמירה במסד נתונים או כל שימוש אחר.

                                א מנותק
                                א מנותק
                                אהרן
                                כתב ב נערך לאחרונה על ידי
                                #19

                                @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                                מה הכוונה "שומר"

                                בהודעות בהמשך הגדרת "שאוכל לגשת אליו מכל מקום בקוד"
                                זה א"א עם פרינט
                                וגם בDB זה מקומי

                                "לשמור" התכוונתי במשתנה מקומי (או גלובלי, שהוא עדיין מקומי רק בסקופ אחר).

                                תגובה 1 תגובה אחרונה
                                0
                                • nigunN nigun

                                  @yossiz
                                  נתחיל ממה שהבנתי מה זה callback
                                  בJS הדרך לנהל את התוצאה שמתקבל מבקשת HTTP (למשל)
                                  היא לעשות פונקציה בתוך פונקציה
                                  וכך אנחנו תופסים את התגובה, בלי שהיא "תברח" לנו

                                  מכיוון שלפעמים צריך לכתוב כמה callback-ים אחד בתוך השני
                                  זה מסבך את העניינים (גהנום בלע"ז).

                                  לכן הוסיפו את פרומיס ושות'
                                  שינהלו את זה בצורה שונה.

                                  עכשיו הבנתי נכון? (אני מנחש שלא👶 )

                                  yossizY מנותק
                                  yossizY מנותק
                                  yossiz
                                  כתב ב נערך לאחרונה על ידי
                                  #20

                                  @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                                  בJS הדרך לנהל את התוצאה שמתקבל מבקשת HTTP (למשל)
                                  היא לעשות פונקציה בתוך פונקציה
                                  וכך אנחנו תופסים את התגובה, בלי שהיא "תברח" לנו

                                  הבנת טוב טוב למה אי אפשר לתפוס אותה במשתנה פשוטה?
                                  אם כן אתה על דרך המלך. אבל עוד לא הגעת ליעד...
                                  אתה צודק שפרומיס עוזר לנו לתפוס את התשובה במשתנה.
                                  אבל פספסת עוד נקודה חשובה שחוץ ממה שאחנו רוצים שלא יברח לנו אנחנו גם חייבים לקבל הודעה על סיום הפעולה. ואז נרצה להמשיך את שרשרת הפעולות עם השלב הבא.
                                  כבר הזכרנו למעלה שאי אפשר בשום מחיר להפסיק את ה-thread הראשי שיחכה לאירוע מסויים.
                                  אז חייבים callback-ים.
                                  עכשיו האתגר שעמדה לפני מהנדסי השפה הוא למצוא את הדרך הכי אלגנטית לתכנת עם ספגטי של callback-ים...

                                  מה שכתבת למעלה לא מדוייק כי:

                                  הPromise שומר את הערך במשתנה בזיכרון (או אולי מערך)

                                  אתה חשבת על פתרון אחד לבעיה שאותה הבנת, (שאי אפשר לתפוס את הערך של התשובה). הפתרון של פרומיס הוא בצורה שונה. לא במשתנה גלובלי.

                                  ואז אפשר לגשת למשתנה הנ"ל מכל מקום בקוד ולבדוק את הערך.

                                  כנ"ל, אי אפשר לגשת ישירות למשתנה כמו במשתנה גלובלי.
                                  אפשר למסור ל-runtime פונקציה שמורצת עם התשובה כארגומנט.

                                  📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                  nigunN תגובה 1 תגובה אחרונה
                                  2
                                  • yossizY yossiz

                                    @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                                    בJS הדרך לנהל את התוצאה שמתקבל מבקשת HTTP (למשל)
                                    היא לעשות פונקציה בתוך פונקציה
                                    וכך אנחנו תופסים את התגובה, בלי שהיא "תברח" לנו

                                    הבנת טוב טוב למה אי אפשר לתפוס אותה במשתנה פשוטה?
                                    אם כן אתה על דרך המלך. אבל עוד לא הגעת ליעד...
                                    אתה צודק שפרומיס עוזר לנו לתפוס את התשובה במשתנה.
                                    אבל פספסת עוד נקודה חשובה שחוץ ממה שאחנו רוצים שלא יברח לנו אנחנו גם חייבים לקבל הודעה על סיום הפעולה. ואז נרצה להמשיך את שרשרת הפעולות עם השלב הבא.
                                    כבר הזכרנו למעלה שאי אפשר בשום מחיר להפסיק את ה-thread הראשי שיחכה לאירוע מסויים.
                                    אז חייבים callback-ים.
                                    עכשיו האתגר שעמדה לפני מהנדסי השפה הוא למצוא את הדרך הכי אלגנטית לתכנת עם ספגטי של callback-ים...

                                    מה שכתבת למעלה לא מדוייק כי:

                                    הPromise שומר את הערך במשתנה בזיכרון (או אולי מערך)

                                    אתה חשבת על פתרון אחד לבעיה שאותה הבנת, (שאי אפשר לתפוס את הערך של התשובה). הפתרון של פרומיס הוא בצורה שונה. לא במשתנה גלובלי.

                                    ואז אפשר לגשת למשתנה הנ"ל מכל מקום בקוד ולבדוק את הערך.

                                    כנ"ל, אי אפשר לגשת ישירות למשתנה כמו במשתנה גלובלי.
                                    אפשר למסור ל-runtime פונקציה שמורצת עם התשובה כארגומנט.

                                    nigunN מנותק
                                    nigunN מנותק
                                    nigun
                                    כתב ב נערך לאחרונה על ידי
                                    #21

                                    @yossiz
                                    מה הבעיה לעצור את הthread?
                                    ומה בעצם הפתרון?
                                    (אני כנראה עדיין חושב בראש של גו
                                    ששם עוצרים את הthread עד לקבלת תוצאה)

                                    מייל: nigun@duck.com

                                    yossizY א 2 תגובות תגובה אחרונה
                                    0
                                    • nigunN nigun

                                      @yossiz
                                      מה הבעיה לעצור את הthread?
                                      ומה בעצם הפתרון?
                                      (אני כנראה עדיין חושב בראש של גו
                                      ששם עוצרים את הthread עד לקבלת תוצאה)

                                      yossizY מנותק
                                      yossizY מנותק
                                      yossiz
                                      כתב ב נערך לאחרונה על ידי
                                      #22

                                      @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                                      מה הבעיה לעצור את הthread?

                                      כי אין thread אחר. יש רק אחד. אם תעצור את ה-thread תגרום לפקק רציני. כל הדף יתקע (במקרה של דפדפן). או במקרה של נוד, כל השרת יתקע.
                                      אה, אז למה לא נעשה כמה thread-ים? כי זה יקר, וזה בדיוק מה שנוד מנסה לחסוך.

                                      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                                      nigunN תגובה 1 תגובה אחרונה
                                      2
                                      • yossizY yossiz

                                        @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                                        מה הבעיה לעצור את הthread?

                                        כי אין thread אחר. יש רק אחד. אם תעצור את ה-thread תגרום לפקק רציני. כל הדף יתקע (במקרה של דפדפן). או במקרה של נוד, כל השרת יתקע.
                                        אה, אז למה לא נעשה כמה thread-ים? כי זה יקר, וזה בדיוק מה שנוד מנסה לחסוך.

                                        nigunN מנותק
                                        nigunN מנותק
                                        nigun
                                        כתב ב נערך לאחרונה על ידי
                                        #23

                                        @yossiz
                                        בסדר
                                        אז מה הפתרון?

                                        מייל: nigun@duck.com

                                        א yossizY 2 תגובות תגובה אחרונה
                                        0
                                        • nigunN nigun

                                          @yossiz
                                          מה הבעיה לעצור את הthread?
                                          ומה בעצם הפתרון?
                                          (אני כנראה עדיין חושב בראש של גו
                                          ששם עוצרים את הthread עד לקבלת תוצאה)

                                          א מנותק
                                          א מנותק
                                          אהרן
                                          כתב ב נערך לאחרונה על ידי
                                          #24

                                          @nigun אמר באיך עובד קוד אסינכרוני בJS?:

                                          ששם עוצרים את הthread עד לקבלת תוצאה)

                                          בטוח?
                                          ואם אני מפעיל לולאה 800 שמריצה בכל פעם פונקציה עם go
                                          היא אוספת thread מכל העיר?

                                          זה אל מגבלה, זו צופר
                                          למה מיקסר שרכשת צריך להמתין מכובה כי כבר טחנת בו תפוזים עד שתטחון במיקסר אחר גם את התפוחים? עדיף לרכוש 2 קערות ולהשתמש במיקסר אחד 🙂 .

                                          nigunN תגובה 1 תגובה אחרונה
                                          0
                                          תגובה
                                          • תגובה כנושא
                                          התחברו כדי לפרסם תגובה
                                          • מהישן לחדש
                                          • מהחדש לישן
                                          • הכי הרבה הצבעות


                                          • 1
                                          • 2
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום