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

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

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

async ב - forEach

מתוזמן נעוץ נעול הועבר תכנות
23 פוסטים 4 כותבים 1.5k צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #14

    @dovid אצלי זה כבר עובד תקופה מאז שכתבת את הקוד הראשון.
    מעניין איך עשיתי בסוף.

    dovidD תגובה 1 תגובה אחרונה
    0
    • מנצפךמ מנצפך

      @dovid אצלי זה כבר עובד תקופה מאז שכתבת את הקוד הראשון.
      מעניין איך עשיתי בסוף.

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

      @מנצפך אמר בasync ב - forEach:

      @dovid אצלי זה כבר עובד תקופה מאז שכתבת את הקוד הראשון.
      מעניין איך עשיתי בסוף.

      נכון, הוא יעבוד, אבל הוא מסורבל.
      צריך להסיר את הasync+await.

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

        טוב, בקשר לקוד השני האחרון, אני טעיתי שוב ולקח לי זמן להבין למה.
        לפי דברי, הvalues אמור להכיל רשימה של מספרים - התוצאות. וניסיתי בקונסול, ולא, זה מחזיר רשימה של פרומייז...
        קודם כל, למה אני חושב שזה חייב להחזיק מספרים ולא פרומייז? כי await Promise מחזיר תוצאה פרימיטיבית ולא פרומייז (ההשמה וכל מה שאחריה מתבצעת מאוחר מתי שהקאלבק נקרא, זה בעצם מאחורי הקלעים מומר לthen של פרומייז).
        אבל כשעושים map ונותנים פונקציה מסוג async, אני מבין שכנראה במקום שעבור כל איבר יוכנס תוצאת הקאלבק, מאחורי הקלעים הפונקציה הזו הופכת לאובייקט פרומייז חדש, שעוטף את הפרומייז הפנימי.

        אקיצער, אין טעם לעשות async+await בפונקציית הmap. אלא יש להשתמש בפוקנציה רגיל שמחזירה פרומייז ואח"כ לעשות Promise.all.

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

        @dovid אמר בasync ב - forEach:

        אקיצער, אין טעם לעשות async+await בפונקציית הmap. אלא יש להשתמש בפוקנציה רגיל שמחזירה פרומייז ואח"כ לעשות Promise.all.

        כלומר כך:

        var values = [1,2,3,4,5,6,7,8,9].map(function(row){
          return new Promise((reslove) => 
             setTimeout(() => reslove(row*2), Math.random()*2000)
          );
        });
        
        
        Promise.all(values).then(function(newlist){
          console.log(newlist)  ;
        });
        

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

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

          @dovid אמר בasync ב - forEach:

          אקיצער, אין טעם לעשות async+await בפונקציית הmap. אלא יש להשתמש בפוקנציה רגיל שמחזירה פרומייז ואח"כ לעשות Promise.all.

          כלומר כך:

          var values = [1,2,3,4,5,6,7,8,9].map(function(row){
            return new Promise((reslove) => 
               setTimeout(() => reslove(row*2), Math.random()*2000)
            );
          });
          
          
          Promise.all(values).then(function(newlist){
            console.log(newlist)  ;
          });
          

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

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

          @אהרן אמר בasync ב - forEach:

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

          זה

          console.time('test1')
          var values = [1,2,3,4,5,6,7,8,9].map(function(row){
            return new Promise((reslove) => {
               var rndom = Math.random()*2000;
               console.log(rndom)  ;
               setTimeout(() => reslove(row*2), rndom)
            });
          });
          ​
          ​
          Promise.all(values).then(function(newlist){
            console.timeEnd('test1')
            console.log(newlist);
          });
          

          מוכיח שבמקביל.

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

            מה אתם אומרים על זה:

            function asyncMap(task) {
            	return Promise.all(
            		this.map(function(row){
            			return new Promise((reslove) => {
            				task(row, reslove);
            			});
            		})
            	);
            }
            
            Array.prototype.asyncMap = asyncMap;
            
            [1,2,3,4,5,6,7,8,9].asyncMap( function(row, reslove){
            	setTimeout(() => reslove( row*2), Math.random()*3000);
            })
            .then(function(newlist){
              console.log(newlist);
            });
            
            תגובה 1 תגובה אחרונה
            2
            • dovidD מחובר
              dovidD מחובר
              dovid
              ניהול
              כתב ב נערך לאחרונה על ידי
              #19

              @אהרן יפה מאוד!
              תתקן בtask שבתוך הפרומייז להוסיף return או שתמחק את הסוגריים המסולסלות והנקודה פסיק.

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

                @אהרן יפה מאוד!
                תתקן בtask שבתוך הפרומייז להוסיף return או שתמחק את הסוגריים המסולסלות והנקודה פסיק.

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

                @dovid אמר בasync ב - forEach:

                להוסיף return

                בשביל מה?

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

                  @dovid אמר בasync ב - forEach:

                  להוסיף return

                  בשביל מה?

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

                  @אהרן אמר בasync ב - forEach:

                  @dovid אמר בasync ב - forEach:

                  להוסיף return

                  בשביל מה?

                  צודק, טעיתי בקריאת הקוד.

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

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

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

                    [1,2,3,4,5,6,7,8,9].asyncMap( [func1, func2, func3] )
                    .then(function(newlist){
                      console.log(newlist);
                    });
                    

                    מה אומרים, אפשרי?

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

                      ברור שאפשר.
                      הנה: https://stackoverflow.com/q/29880715/1271037
                      הפתרון שם מבוסס על רקורסיה שנגמרת כשמערך ריק.

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


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

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

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