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

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

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

הדרך הנכונה לביצוע קוד אסינכרוני

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

    איך אפשר לבצע את הקוד הבא שיקרה שורה אחר שורה בjs בדרך הקלה ביותר
    במציאות מה שקורה שהreturn האחרון חוזר לפני כל פעולות הmap.

    אני לא כועס על js אני יודע שככה הטמבל הזה עובד, אני רק רוצה לדעת איך בכל זאת...
    אני יודע שיש asinc וכו' השאלה איפה בדיוק שמים את הawait אם בכלל...

    export function getAmountFromMonthlyDeposit(MonthlyDeposit, children, data, multi = true){
    
    
        if(!multi) children = [children];
        const groupByYears = _.groupBy(children, (i) => i.marriageAge - i.age);
        console.log(groupByYears)
        data = _.sortBy(data, i => i.amount).reverse();
        data = JSON.parse(JSON.stringify(data));
    
        let _return = false;
    
        data.map( a => {
    
            if(_return) return;
    
            a.innerPrograms.map( (b, bi) => {
                if(_return) return;
                console.log('iii')
                let _amountMonthly = (a.amount / b.doublingRatio) / b.depositMonths;
                a.innerPrograms.points =  _amountMonthly/10;
                a.innerPrograms._amountMonthly = _amountMonthly;
            });
    
            let points = {};
            Object.keys(groupByYears).map((key ) => {
                if(_return) return;
                let program = getNearestAmount(a.innerPrograms, Number(key), 'yearsOfWaiting');
                points[key] = {program: program, points: program.points * groupByYears[key].length, countChildren:groupByYears[key].length}
            });
    
            let amountPerPoint = MonthlyDeposit / _.sumBy(points, 'points');
    
            Object.keys(points).map( (p) => {
                if(_return) return;
                let totalPerChild =  (points[p].points / 2) * amountPerPoint;
                if( totalPerChild >= points[p].program._amountMonthly){
                    _return = (totalPerChild * points[p].program.depositMonths) * points[p].program.doublingRatio;
                }
            });
    
        });
    
        return _return;
    }
    
    dovidD yossizY A 3 תגובות תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב לש.ב.ח. ב נערך לאחרונה על ידי dovid
      #2

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

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

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

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

        @ש-ב-ח סתם הערה (בלי שקראתי את הקוד):
        הפעולה map מחזירה מערך אחר והיא נועדה לשם קבלת מערך חדש שנוצר מהמערך המקורי. לשם קריאות, אם אתה רוצה רק לעבור על המערך בלולאה ולעשות פעולות איתה, יותר טוב להשתמש ב-forEach.

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

        תגובה 1 תגובה אחרונה
        3
        • A מנותק
          A מנותק
          avr416
          השיב לש.ב.ח. ב נערך לאחרונה על ידי avr416
          #4

          @ש-ב-ח כמה הערות:
          א.
          Js לא טמבל, ובכוונה הוא א-סינכרוני, כדי שהדפדפן לא יקפא כשהוא מחכה לתגובות מהשרת או מבצע פעולות לדיסק וכדו'.

          לשאלתך, פונקציה שמחזירה פרומיס, דהיינו שהיא א-סינכרונית, אפשר לכתוב בחתימה שלה async, ואז לקרוא לה עם await, כלומר תחכה עד שתחזור התשובה.
          (מאחורי הקלעים js ממיר את זה לpromise, ומאחורי זה בעצם הופך לcallback..
          כי זה בעצם רק צורת כתיבה שהיא יותר קריאה)

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

            @avr416 אמר בהדרך הנכונה לביצוע קוד אסינכרוני:

            Js לא טמבל

            סליחה על הפגיעה בכבוד הרמטכל 🙂
            ב"ה הסתדרתי
            הפכתי כל map לfor וזה עובד
            כנראה שבכל זאת map לא ממתין לסיומו לפני return של הפונקציה
            גם בbreak point על הדפדפן ראיתי את תחילת הmap מיד אחרי זה את הreturn
            לא יודע מה ההסבר אבל זה מה שהיה
            אולי בהזדמנות אנסה לחקור זאת
            (וזה לא נכון לגבי כל map כי ניסיתי לעשות הדגמה קטנה (כמו ש@dovid הציע, וכנראה שהוא צדק שהקוד שלי הבעיתי אך בהחלט יש כאן גם בעיה בקוד שלי וגם בmap כי כאמור שיניתי את הmap לfor וזה עבד...)

            אהה @dovid, גם קצת ניקיתי את הקוד שיהיה יותר קריא 🙂

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

              @ש-ב-ח אמר בהדרך הנכונה לביצוע קוד אסינכרוני:

              כנראה שבכל זאת map לא ממתין לסיומו לפני return של הפונקציה

              שגוי.

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

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

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

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

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

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