דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. רשתות
  4. פיתוח ועיצוב אתרים
  5. Full Stack
  6. צד שרת
  7. NodeJS
  8. עזרה הדדית - NodeJS
  9. בקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר

בקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר

מתוזמן נעוץ נעול הועבר עזרה הדדית - NodeJS
48 פוסטים 4 כותבים 164 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ע עידו300

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

    let textFromSpeech="";
          let ans = await call.read([{type: 'text', data: "אנא הקלט משהו"}], "record");
           **console.log(ans);**
          await execFile("python3", ["/home/node.stamandsefer.co.il/public_html/recognize.py",ans], (error, stdout, stderr) => {
          // console.log(stdout);
           textFromSpeech = stdout;
           **console.log(textFromSpeech);**
            if (error) {
              console.error(error);
            call.id_list_message([{type:'text', data: "Error processing audio" }]);
            return;
            }
          });
          **console.log(` התוצאה היא ${textFromSpeech}`);**
            call.id_list_message([{type:'text', data: ` התוצאה היא ${textFromSpeech}`}]);
    

    ניסיתי לסמן את הקונסולים בשביל ההבנה. בעצם מה שמגיע זה
    "1/021.wav"
    "התוצאה היא"
    והתוצאה שהגיעה...
    לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי).

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

    @עידו300
    איך אתה מגדיר בהתחלה את המשתנה execFile?

    ע תגובה 1 תגובה אחרונה
    1
    • ע"ה דכו"עע ע"ה דכו"ע

      @עידו300
      איך אתה מגדיר בהתחלה את המשתנה execFile?

      ע מחובר
      ע מחובר
      עידו300
      כתב נערך לאחרונה על ידי
      #42

      @ע-ה-דכו-ע לא מגדיר
      רק מה שכתוב בקוד הנ"ל וב

      import {execFile} from 'child_process';
      
      ע"ה דכו"עע תגובה 1 תגובה אחרונה
      0
      • ע עידו300

        @ע-ה-דכו-ע לא מגדיר
        רק מה שכתוב בקוד הנ"ל וב

        import {execFile} from 'child_process';
        
        ע"ה דכו"עע מנותק
        ע"ה דכו"עע מנותק
        ע"ה דכו"ע
        כתב נערך לאחרונה על ידי
        #43

        @עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:

        @ע-ה-דכו-ע לא מגדיר
        רק מה שכתוב בקוד הנ"ל וב

        import {execFile} from 'child_process';
        

        תייבא ככה

        תנסה לשנות לזה

        import { execFile } from 'child_process/promises';
        

        לא מאה אחוז שזה קשור, אבל אני חושב.

        ע תגובה 1 תגובה אחרונה
        0
        • ע"ה דכו"עע ע"ה דכו"ע

          @עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:

          @ע-ה-דכו-ע לא מגדיר
          רק מה שכתוב בקוד הנ"ל וב

          import {execFile} from 'child_process';
          

          תייבא ככה

          תנסה לשנות לזה

          import { execFile } from 'child_process/promises';
          

          לא מאה אחוז שזה קשור, אבל אני חושב.

          ע מחובר
          ע מחובר
          עידו300
          כתב נערך לאחרונה על ידי
          #44

          @ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה

          ע"ה דכו"עע תגובה 1 תגובה אחרונה
          0
          • ע עידו300

            @ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה

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

            @עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:

            @ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה

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

            ע תגובה 1 תגובה אחרונה
            0
            • ע עידו300

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

              let textFromSpeech="";
                    let ans = await call.read([{type: 'text', data: "אנא הקלט משהו"}], "record");
                     **console.log(ans);**
                    await execFile("python3", ["/home/node.stamandsefer.co.il/public_html/recognize.py",ans], (error, stdout, stderr) => {
                    // console.log(stdout);
                     textFromSpeech = stdout;
                     **console.log(textFromSpeech);**
                      if (error) {
                        console.error(error);
                      call.id_list_message([{type:'text', data: "Error processing audio" }]);
                      return;
                      }
                    });
                    **console.log(` התוצאה היא ${textFromSpeech}`);**
                      call.id_list_message([{type:'text', data: ` התוצאה היא ${textFromSpeech}`}]);
              

              ניסיתי לסמן את הקונסולים בשביל ההבנה. בעצם מה שמגיע זה
              "1/021.wav"
              "התוצאה היא"
              והתוצאה שהגיעה...
              לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי).

              צדיק תמיםצ מנותק
              צדיק תמיםצ מנותק
              צדיק תמים
              מדריכים
              כתב נערך לאחרונה על ידי צדיק תמים
              #46

              @עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:

              לא לפי הסדר (כמו שאמר כאן @צדיק-תמים שהawait לא חוסם את זה לגמרי).

              זה לא מה שאמרתי.

              רוצה לזכור קריאת שמע בזמן? לחץ כאן! || אתר שכולו מדריכים

              תגובה 1 תגובה אחרונה
              0
              • צדיק תמיםצ צדיק תמים

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

                ע מחובר
                ע מחובר
                עידו300
                כתב נערך לאחרונה על ידי
                #47

                @צדיק-תמים כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:

                await רק מעכב את השורות הבאות, לא תוקע את התוכנה, וכיוון שזה בפונקציה אנונימית זה לא יעכב את המעבר לשורה הבאה

                ככה הבנתי

                תגובה 1 תגובה אחרונה
                0
                • ע"ה דכו"עע ע"ה דכו"ע

                  @עידו300 כתב בבקשת מידע | פעולה אחרי id_listוכו' בימות ראוטר:

                  @ע-ה-דכו-ע כשכותבים ככה הוא זורק שגיאה

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

                  ע מחובר
                  ע מחובר
                  עידו300
                  כתב נערך לאחרונה על ידי
                  #48

                  @ע-ה-דכו-ע אז GPT הביא לי תיקון:

                  הבעיה בקוד שלך היא שקריאת execFile היא אסינכרונית, ולכן הפקודה

                  
                  console.log(` התוצאה היא ${textFromSpeech}`);
                  
                  call.id_list_message([...]);
                  
                  

                  מתבצעת לפני שהפונקציה הפנימית של execFile סיימה לרוץ — כלומר, לפני ש־textFromSpeech עודכן בפועל.

                  כדי לתקן זאת, יש לעטוף את execFile ב־Promise ולחכות לה באמצעות await.

                  כך זה צריך להיראות:

                  
                  import { execFile } from 'child_process';
                  
                  import { promisify } from 'util';
                  
                  const execFileAsync = promisify(execFile);
                  
                  
                  
                  let textFromSpeech = "";
                  
                  
                  
                  let ans = await call.read([{ type: 'text', data: "אנא הקלט משהו" }], "record");
                  
                  console.log("ans:", ans);
                  
                  
                  
                  try {
                  
                   // מריץ את הסקריפט פייתון וממתין לתוצאה
                  
                   const { stdout } = await execFileAsync("python3", [
                  
                     "/home/node.stamandsefer.co.il/public_html/recognize.py",
                  
                     ans
                  
                   ]);
                  
                  
                  
                   textFromSpeech = stdout.trim(); // הסר רווחים ושורות מיותרות
                  
                   console.log(`התוצאה היא: ${textFromSpeech}`);
                  
                  
                  
                   await call.id_list_message([
                  
                     { type: 'text', data: `התוצאה היא ${textFromSpeech}` }
                  
                   ]);
                  
                  
                  
                  } catch (error) {
                  
                   console.error("Error:", error);
                  
                   await call.id_list_message([
                  
                     { type: 'text', data: "אירעה שגיאה בעיבוד האודיו" }
                  
                   ]);
                  
                  }
                  
                  

                  הסבר קצר:

                  • promisify(execFile) הופך את הפונקציה לגרסה תואמת ל־await.

                  • השורה await execFileAsync(...) גורמת לקוד להמתין עד שפייתון יסיים לעבד את הקלט ויחזיר פלט.

                  • לאחר מכן אתה יכול להשתמש בתוצאה בביטחון, בלי שהקוד ירוץ מוקדם מדי.

                  אם תרצה — אפשר להוסיף גם טיפול במקרה שהקלט ans לא מכיל נתיב לקובץ תקין או שההקלטה נכשלה.

                  די כמו שאמרת
                  תודה רבה לכולם

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

                  • התחברות

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

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