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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. איך מתמודדים עם asinc ב-javascript

איך מתמודדים עם asinc ב-javascript

מתוזמן נעוץ נעול הועבר ארכיון code613m
41 פוסטים 3 כותבים 2.6k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אהרן
    כתב ב נערך לאחרונה על ידי
    #24

    @דוד ל.ט.

    אתה צריך לשנות את החשיבה. מה שאתה מעלה זה בכלל לא חסרונות של JS, בנו אותו דוקא לזה.
    באמת נראה לי ששאילתות כמו שלך מDB לא כדאי לבצע אסינכרוני, כי אתה לא רוצה תוצאה של כל הקודם זוכה אלא לפי הסדר (המילה מקורית ורק אח"כ וריאציה א' ורק אח"כ וריאציה ב').
    כשרוצים לעשות לפי סדר בJS הכי טוב זה להשתמש עם רשימה. משהו כזה:

    app.post("/", function (req, res) {
      searchFromDb('word', function(result)
      {
          if(!result)
              res.status(404).send('Not found');
          else	  
    	      res.send(result);
      });
    });
    
    
    function searchFromDb(word, func) {
        var searchVariation = { word, word, word};
    	
    		
        var getFromDb = function(index) {
            db.get(searchVariation[index], function (err, value) {
    		    if(err)
                {			
    			    if(index < searchVariation.length)
    			        getFromDb(index++)
    				else
    				    func();
    			}
    			else
    			{
    			   func(value)
    			}
    		}
        }	
    
        getFromDb(0);
    }
    

    באוסף searchVariation שמתי רשימה של אותה מילה אבל הכוונה לעשות וריאציות שונות. הבדיקה עליהם תופעל לפי סדר (רק במקרה כישלון של הראשון תתבצע בדיקה של השני).
    אם עצם הכנת הוריאציות עולה ביצועים אתה יכול לוותר על רשימה אבל לעשות פונקציה שמקבלת את המקור ורשימה של מה שנוסה כבר ובודקת אם יש מה לנסות עוד.
    במידה ויש לך וריאציות עם אותו עדיפות הכי טוב זה לשלוח אסינכרוני ו"כל הקודם זוכה" ככה אתה מרויח את מעלת הJS.

    אוקי
    אפשר למחוק פה עמוד שלם של שטויות שכתבתי
    ברשותך, נחזור להתחלה
    שאלות פשוטות של הבנה (שכמדומני שלאחריהם אחסוך ממכם הרבה שאלות נספות):

    searchFromDb('word', function(result)
    

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

    עוד משהו שאני ממש משתומם
    searchFromDb נמצא פעמיים ובכל פעם עם תוכן שונה בתוך ה-{ }.
    אז בקריאה לפונקציה איזה מהם מתבצע??

    אגב
    mat ממשיך לטעון שמוכרחים להשתמש עם asinc.

    פורסם במקור בפורום CODE613 ב08/09/2015 15:21 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      אהרן
      כתב ב נערך לאחרונה על ידי
      #25

      ובכלל איך רקורסיה עוזרת בפונקציה אי סינכרונית?
      הלולאה יכולה להסתיים לפני תשובת הקול-בק הראשונה, ואז להתחיל לענות תשובות שלא לפי הסדר!

      פורסם במקור בפורום CODE613 ב08/09/2015 15:23 (+03:00)

      תגובה 1 תגובה אחרונה
      0
      • א מנותק
        א מנותק
        אהרן
        כתב ב נערך לאחרונה על ידי
        #26

        @דוד ל.ט.

        @אהרן
        רבי דוד

        מה עושה
        func(value)
        מריץ את הפונקציה שעכשיו רצה (רקורסיה)?

        לא, אדרבא זה יציאה מרקורסיה. הfunc זה הפרמטר השני, של הפונקציה searchFromDb. זה הcallback לapp.post.

        אני הכרתי את המחלקה של הasync והיא אכן שימושית מאוד אבל לא נדרשת למקרה שלך שהוא מקרה קלאסי של nodejs. וודאי שאין צורך באיוונטים.

        תמיד תמיד הפעלה של הפונקציה הבאה בארגומנט עוצרת את הפונקציה הנוכחית?

        פורסם במקור בפורום CODE613 ב08/09/2015 15:31 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #27

          @אהרן

          ובכלל איך רקורסיה עוזרת בפונקציה אי סינכרונית?
          הלולאה יכולה להסתיים לפני תשובת הקול-בק הראשונה, ואז להתחיל לענות תשובות שלא לפי הסדר!

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

          פורסם במקור בפורום CODE613 ב08/09/2015 15:50 (+03:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #28

            @אהרן

            @דוד ל.ט.
            @אהרן
            רבי דוד

            מה עושה
            func(value)
            מריץ את הפונקציה שעכשיו רצה (רקורסיה)?

            לא, אדרבא זה יציאה מרקורסיה. הfunc זה הפרמטר השני, של הפונקציה searchFromDb. זה הcallback לapp.post.

            אני הכרתי את המחלקה של הasync והיא אכן שימושית מאוד אבל לא נדרשת למקרה שלך שהוא מקרה קלאסי של nodejs. וודאי שאין צורך באיוונטים.

            תמיד תמיד הפעלה של הפונקציה הבאה בארגומנט עוצרת את הפונקציה הנוכחית?

            ממש לא.
            לא הבנתי.
            יש שם פונקצייה (getFromDb ) של פניה לDB. התוצאה חוזרת לפונקציה נוספת (אנונימית). היא בודקת את התוצאה. ישנו if שהודק אם ישנה שגיאה של ערך לא נמצא. במידה ואכן ישנה שגיאה, מורצת הפונקציה העליונה שוב - מה שנקרא רקורסיה. אם אין שגיאה - ישנו ערך, אז מוחזר הערך ע"י הפעלת הפונקציה שניתנה כארגומנט (func).

            פורסם במקור בפורום CODE613 ב08/09/2015 15:55 (+03:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            0
            • א מנותק
              א מנותק
              אהרן
              כתב ב נערך לאחרונה על ידי
              #29

              משתגע
              אולי אני כ"כ מטומטם
              אבל בטוח שאני מפספס משהו מאוד בסיסי 😢

              if(index < searchVariation.length)
                                  getFromDb(index++)
                              else
                                  func();
              

              func() שווה ל'אל תעשה כלום'?
              באותה מידה השורה היתה יכולה להיות ריקה?

              func(value)
              

              ואז מה קורה? לאן זה נשלח/חוזר??

              לא אלאה מלומר שוב: תודה!

              פורסם במקור בפורום CODE613 ב08/09/2015 16:12 (+03:00)

              תגובה 1 תגובה אחרונה
              1
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                כתב ב נערך לאחרונה על ידי
                #30

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

                פורסם במקור בפורום CODE613 ב08/09/2015 16:24 (+03:00)

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #31

                  @אהרן

                  func() שווה ל'אל תעשה כלום'?
                  באותה מידה השורה היתה יכולה להיות ריקה?

                  אם לא הייתי כותב כלום, אז כלום לא היה קורא והלקוח (הבקשה מהדפדפן) לעולם לא הייתה נענית.
                  ע"י הפעלה של הfunc ללא פרמטר מורצת השורה הזו:

                  res.status(404).send('Not found');
                  

                  תוכל לראות איך ע"י עיון בקטע קוד הראשון.

                  פורסם במקור בפורום CODE613 ב08/09/2015 16:28 (+03:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • א מנותק
                    א מנותק
                    אהרן
                    כתב ב נערך לאחרונה על ידי
                    #32

                    ברור שאני מסתכל על הקוד המקורי
                    מאיפה אני מעתיק ועל מה אני שואל ?
                    @דוד ל.ט.

                    @אהרן

                    func() שווה ל'אל תעשה כלום'?
                    באותה מידה השורה היתה יכולה להיות ריקה?

                    אם לא הייתי כותב כלום, אז כלום לא היה קורא והלקוח (הבקשה מהדפדפן) לעולם לא הייתה נענית.
                    ע"י הפעלה של הfunc ללא פרמטר מורצת השורה הזו:

                    res.status(404).send('Not found');
                    

                    תוכל לראות איך ע"י עיון בקטע קוד הראשון.

                    כאילו כתוב

                    func = function(arg) { return arg }
                    

                    וזו הסיבה שהפונקציה מחזירה את הערך לפונקציה שהפעילה אותה?
                    איך הקסם הזה נהיה לבד?

                    פורסם במקור בפורום CODE613 ב08/09/2015 17:09 (+03:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • א מנותק
                      א מנותק
                      אהרן
                      כתב ב נערך לאחרונה על ידי
                      #33

                      @דוד ל.ט.

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

                      נראה שלא הובנתי
                      אנסה לשאול את אותה שאלה על דוגמא סתמית
                      אני רואה את זה דומה לדוגמא הלא אפשרית הבאה:

                      var aaa =function() { console.log('111') }
                      aaa() { console.log('222') }הרי כתבת
                      
                      searchFromDb('word', function(result)
                        {
                            if(!result)
                                res.status(404).send('Not found');
                            else   
                                res.send(result);
                        });
                      

                      ש[לכאורה] בדיוק כמו

                      var searchFromDb = function('word', function(result)
                        {
                            if(!result)
                                res.status(404).send('Not found');
                            else   
                                res.send(result);
                        });
                      

                      אז איך אח"כ אתה מריץ אותה עם תוכן אחר בתוך הסקופ????

                      פורסם במקור בפורום CODE613 ב08/09/2015 17:16 (+03:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • S מנותק
                        S מנותק
                        softs
                        כתב ב נערך לאחרונה על ידי
                        #34

                        הדוגמה שהבאת לא ברור לי מה היא ממחישה
                        בא נתרכז בשאלה שלך, לתוך הפונקציה של ה searchFromDb נשלחו שתי פרמטרים האחד זה המילה לחיפוש והשני הוא משתנה שמכיל פונקציה
                        לפונקצית החיפוש יש לוגיקה פנימית שלפיה היא מחליטה איך להריץ את הפונקציה שיש בתוך המשתנה

                        code.png

                        פורסם במקור בפורום CODE613 ב08/09/2015 17:29 (+03:00)

                        תגובה 1 תגובה אחרונה
                        0
                        • א מנותק
                          א מנותק
                          אהרן
                          כתב ב נערך לאחרונה על ידי
                          #35

                          אוקי
                          התבלבתי לגמרי
                          בטעות ראיתי את הסקופ של הפונקציה האנונימית כסקופ של searchFromDb.
                          מחשב מסלול מחדש.

                          אגב איזה ide זה? נראה ממש מגניב!

                          פורסם במקור בפורום CODE613 ב08/09/2015 17:41 (+03:00)

                          תגובה 1 תגובה אחרונה
                          0
                          • א מנותק
                            א מנותק
                            אהרן
                            כתב ב נערך לאחרונה על ידי
                            #36

                            @אהרן

                            אגב איזה ide זה? נראה ממש מגניב!

                            בזכותו הבנתי!!!!
                            :mrgreen: :mrgreen:

                            פורסם במקור בפורום CODE613 ב08/09/2015 17:43 (+03:00)

                            תגובה 1 תגובה אחרונה
                            0
                            • S מנותק
                              S מנותק
                              softs
                              כתב ב נערך לאחרונה על ידי
                              #37

                              שמח שהבנת
                              chrome developer tools . . .

                              פורסם במקור בפורום CODE613 ב08/09/2015 20:10 (+03:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • א מנותק
                                א מנותק
                                אהרן
                                כתב ב נערך לאחרונה על ידי
                                #38

                                @softs

                                שמח שהבנת
                                chrome developer tools . . .

                                F12?
                                הדבקת באיזה קובץ בלשונית sources?
                                ואיך מריצים את זה? זה לא נראה כמו בתמונה

                                פורסם במקור בפורום CODE613 ב08/09/2015 21:05 (+03:00)

                                תגובה 1 תגובה אחרונה
                                0
                                • א מנותק
                                  א מנותק
                                  אהרן
                                  כתב ב נערך לאחרונה על ידי
                                  #39

                                  @אהרן

                                  @softs
                                  שמח שהבנת

                                  chrome developer tools . . .

                                  F12?
                                  הדבקת באיזה קובץ בלשונית sources?
                                  ואיך מריצים את זה? זה לא נראה כמו בתמונה

                                  ?

                                  פורסם במקור בפורום CODE613 ב18/09/2015 16:52 (+03:00)

                                  תגובה 1 תגובה אחרונה
                                  0
                                  • dovidD מנותק
                                    dovidD מנותק
                                    dovid ניהול
                                    כתב ב נערך לאחרונה על ידי
                                    #40

                                    הוא כתב קובץ HTML עם מקטע JS ושמר אותו פיזית בדיסק.
                                    הציג בכרום ושם ברייקפוינט בsource.

                                    ואני מציע לך לבדוק את visual studio code.

                                    פורסם במקור בפורום CODE613 ב19/09/2015 23:54 (+03:00)

                                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                    תגובה 1 תגובה אחרונה
                                    1
                                    • S מנותק
                                      S מנותק
                                      softs
                                      כתב ב נערך לאחרונה על ידי
                                      #41

                                      דוד, הרעיון שלך ארוך מידי בשביל עצלן כמוני
                                      הנה הסוד של העצלנים:

                                      Screen Shot 2015-09-20 at 12.23.05 AM.png

                                      Screen Shot 2015-09-20 at 12.23.55 AM.png

                                      Screen Shot 2015-09-20 at 12.24.19 AM.png

                                      פורסם במקור בפורום CODE613 ב20/09/2015 00:38 (+03:00)

                                      תגובה 1 תגובה אחרונה
                                      1

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

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

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