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

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

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

ASYNC/AWAIT

מתוזמן נעוץ נעול הועבר תוכנה
26 פוסטים 4 כותבים 564 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    שרה רחל
    כתב ב נערך לאחרונה על ידי שרה רחל
    #1

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

    yossizY תגובה 1 תגובה אחרונה
    0
    • yossizY מחובר
      yossizY מחובר
      yossiz
      השיב לשרה רחל ב נערך לאחרונה על ידי yossiz
      #2

      @שרה-רחל תביאי דוגמת קוד בבקשה.

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

      ש 2 תגובות תגובה אחרונה
      2
      • ש מנותק
        ש מנותק
        שרה רחל
        השיב לyossiz ב נערך לאחרונה על ידי
        #3
        פוסט זה נמחק!
        תגובה 1 תגובה אחרונה
        0
        • ש מנותק
          ש מנותק
          שרה רחל
          השיב לyossiz ב נערך לאחרונה על ידי שרה רחל
          #4

          @yossiz

          c
          
          const getAllMembers = async function() {
              let members = await membersRest.getAllMembers();
              let membersData = members.data;
          
              let membersArr = [];
              let mArr = [];
              let mov = [];
              membersData.forEach(z => {
                  let newMember = {
                      _id: z._id,
                      Name: z.Name,
                      Email: z.Email,
                      City: z.City,
                      Movies: mov
                  }
                  membersArr.push(newMember);
              })
              let ss = await subscriptionRest.getSubscriptions();
              let ssData = ss.data;
          
              if (ssData) {
                  //   let result = await subscriptionBL.getAllSubscriptions();
                  let result = await getSsForMembers(ssData, membersArr);
                  console.log("result", result);
          
                  if (result != "not found") {
                      return result;
                  } else {
                      return membersArr;
                  }
              } else {
                  return membersArr;
              }
          
          }
          
          const getSsForMembers = async function(ss, mm) {
              let finalMmArr = {};
              Promise.all(ss.map(async x => {
                  let found = mm.find(y => y._id == x.MemberID);
                  if (found) {
                      let memId = x.MemberID;
                      let mem = await membersRest.getMember(memId);
                      console.log("mem", memId);
          
                      let memData = mem.data;
                      memData.Movies = x.Movies
           let mArr = mm.filter(w => w._id != x.MemberID);
                      mArr.push(memData);
                      finalMmArr.data = mArr;
                      console.log("finalMmArr", finalMmArr);
                      return finalMmArr;
           else {
                      return ("not found");
                  }
              }))
          
          }
          
          yossizY תגובה 1 תגובה אחרונה
          0
          • yossizY מחובר
            yossizY מחובר
            yossiz
            השיב לשרה רחל ב נערך לאחרונה על ידי yossiz
            #5

            @שרה-רחל ומה השאלה? איפה הפונקציה ממשיכה לפני קבלת תשובה?

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

            מוטי אורןמ תגובה 1 תגובה אחרונה
            2
            • מוטי אורןמ מנותק
              מוטי אורןמ מנותק
              מוטי אורן
              השיב לyossiz ב נערך לאחרונה על ידי מוטי אורן
              #6

              @yossiz נראה לי היא מתתכוונת לקוד שנמצא בהערה (שורה 24). @שרה-רחל הוא לא אמור להיות עם await בכלל לפי מה שאני מבין פה.

              עריכה: נראה לי שטעיתי. על פניו כן צריך את ה await

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

                @מוטי-אורן
                תקנתי את הקוד
                הRESULT מודפס לפני MEM

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

                  @שרה-רחל
                  הMEMBER מובא ע"י REST API

                  yossizY תגובה 1 תגובה אחרונה
                  0
                  • yossizY מחובר
                    yossizY מחובר
                    yossiz
                    השיב לשרה רחל ב נערך לאחרונה על ידי
                    #9

                    @שרה-רחל צריך להוסיף await או return לפני promise.all

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

                    ש תגובה 1 תגובה אחרונה
                    4
                    • ש מנותק
                      ש מנותק
                      שרה רחל
                      השיב לyossiz ב נערך לאחרונה על ידי
                      #10

                      @yossiz
                      נכון זה עזר
                      האמת שהPROMISE.ALL
                      כבר היה חלק מהפתרון
                      מה הוא בעצם פותר ?
                      הוא לא אמור לבוא כשיש כמה קריאות אסיכרוניות?
                      בפונקציה זו יש קריאה אחת בתוך הסוגריים של PROMISE.ALL
                      אז איך זה פתר את הבעיה?

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

                        @שרה-רחל יש בקוד בעיה נוספת, הפונקציהבPromise.all נקראת עבור כל אחד מהפריטים ברשימה, ומחזירה עבור כל אחד או not-found או אובייקט משותף לכלל האיברים.
                        הפונקציה הקוראת בודקת אם הערך הוא not-found אבל הוא לעולם לא יהיה not-found כי התוצאה של Promise.all היא תמיד מערך של תוצאות (בכל תוצאה יכול להיות not-found).
                        בקיצור הפונקציה getSsForMembers צריכה כתיבה מחדש, אשמח לעזור אם אדע בגדול מה היא מנסה לעשות.

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

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

                        ש תגובה 1 תגובה אחרונה
                        3
                        • dovidD מחובר
                          dovidD מחובר
                          dovid ניהול
                          השיב לשרה רחל ב נערך לאחרונה על ידי
                          #12

                          @שרה-רחל הפונקציה Promise.all מטפלת במקרה שיש הרבה await לעשות ואת רוצה לחכות שכולם יתבצעו ולקבל את התוצאות כמערך.

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

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

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

                            @dovid
                            אז איך במקרה זה מתאימה הפונקציה
                            יש כאן רק קריאה אחת של AWAIT

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

                              @שרה-רחל ss.map הופך את מערך הss למערך של פונקציות await, כל אחת מהסוג שכתובה בסוגריים... כלומר הטיפול של הפונקציה יתבצע מול כל פריט בעוד הוא נכתב כנראה במקור לטיפול בכלל המערך ביחד. אשמח לדעת מה הפונקציה עושה, נראה שהיא מאחדת בין שני רשימות שונות, ובנוסף מבקשת מהשרת השלמת מידע.

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

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

                              תגובה 1 תגובה אחרונה
                              2
                              • ש מנותק
                                ש מנותק
                                שרה רחל
                                השיב לdovid ב נערך לאחרונה על ידי
                                #15

                                @dovid
                                MEMBER:

                                Name: String,
                                Email: String,
                                City: String
                                

                                Subscriptions

                                MemberId: String,
                                Movies: [String]
                                

                                הפונקציה getAllMembers
                                מציגה את כל הלקוחות אבל אמורה לבדוק אם יש להם מנוי לסרטונים
                                לכן היא מטעינה את כל המנויים ועבור כל מנוי שולחים לפונקציה השניה getSsForMembers
                                שם בודקת אם יש למנוי _ID שמתאים לאאחד מה MemberId של המנויים
                                ומחזירה את המערך של כל המנויים .
                                קוראים לפונקציה getAllMembers פעם אחת

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

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

                                  const getAllMembers = async function () {
                                      let members = await membersRest.getAllMembers();
                                  
                                      let membersArr = members.data.map(z => {
                                          return {
                                              _id: z._id,
                                              Name: z.Name,
                                              Email: z.Email,
                                              City: z.City,
                                              Movies: []
                                          }
                                      });
                                  
                                      let ss = await subscriptionRest.getSubscriptions();
                                      let ssData = ss.data;
                                  
                                      for (const sub of ss.data) {
                                          var memberFind = membersArr.find(x => x._id == sub.MemberID);
                                          if (memberFind)
                                              memberFind.Movies = sub.Movies;
                                          else
                                              console.log(`the member ${sub.MemberID} not found in the members list, but have subscrition!`)
                                      }
                                  
                                      return membersArr;
                                  }
                                  

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

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

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

                                    @dovid גם הקוד הזה ארוך מידי, כי אני שם לב שהMap הראשון לא עושה כלום, הקוד הזה שקול:

                                    const getAllMembers = async function () {
                                        let membersArr = await membersRest.getAllMembers();
                                    
                                        let ss = await subscriptionRest.getSubscriptions();
                                        let ssData = ss.data;
                                    
                                        for (const sub of ss.data) {
                                            var memberFind = membersArr.find(x => x._id == sub.MemberID);
                                            if (memberFind)
                                                memberFind.Movies = sub.Movies;
                                            else
                                                console.log(`the member ${sub.MemberID} not found in the members list, but have subscrition!`)
                                        }
                                    
                                        return membersArr;
                                    }
                                    

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

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

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

                                      @dovid
                                      נראה נכון
                                      אני כבר בודקת
                                      רק מענין אותי למה בקוד הראשוני ששמתי (תקנתיקצת)
                                      הfinalMmArr מדפיס תוכן
                                      בזמן שהRESULT מדפיס אחרי כן UNDEFINDED

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

                                        חיסרתי את העיקר לכאורה שזה הawait membersRest.getMember(memId); אבל עשיתי זאת במודע, כי אני לא מבין מה הוא מביא (מה היה קודם ומה הוא מחליף/מוסיף).

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

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

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

                                          @שרה-רחל אמר בASYNC/AWAIT:

                                          @dovid
                                          נראה נכון
                                          אני כבר בודקת
                                          רק מענין אותי למה בקוד הראשוני ששמתי (תקנתיקצת)
                                          הfinalMmArr מדפיס תוכן
                                          בזמן שהRESULT מדפיס אחרי כן UNDEFINDED

                                          לפני התיקון של @yossiz (לשים return או await) זה לא הגיוני שהוא הדפיס not-found.
                                          אחרי התיקון, הוא היה אמור להדפיס את זה אבל בתוך מערך [.... .... "not-found"]

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

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

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

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

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

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