ABA


"שאלה בנוגע לJS ופונקציות אסינכרוניות"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #15854 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15854
Nokia
חבר מתאריך 1.7.02
538 הודעות
   22:02   23.09.10   
אל הפורום  
  שאלה בנוגע לJS ופונקציות אסינכרוניות  
 
   יש לי פרוייקט שאני מתעסק בו קצת עם HTML5 ונתקעתי בבעיה מייגעת עם פונקציות אסינכרוניות

יש לי פונקציות שכרגע נקרא להן:
a()
b()
c()
d()

והמטרה שלי היא לכתוב קוד שמריץ אותן לפי הסדר שכתבתי למעלה. הבעיה זה שבכל אחת מהן יש פונקציה שמחכה לתשובה והיא אסינכרונית וזה דבר שיכול לגרום לדוגמה לc לרוץ לפני שb הסתיימה אם הקוד שלי סתם היה מבוסס על קריאות אליהן אחת אחרי השנייה. השאלה שלי היא איך אני פותר את הבעיה הזאת בדרך כמה שיותר אלגנטית..
קראתי שיש שיטות שמבוססות על callback (קריאה לb מתוך a לדוגמה) אבל אני מחפש משהו שייראה כמה שיותר נחמד במבט של Top-Down Design

תודה מראש וחג שמח!
(פורסם במקביל בתכנות)


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  מה מונע ממך בסוף הריצה האסינכרונית של a פשוט Ice Cold  24.09.10 22:40 1
     אולי בשבילו זה כל יפתור את הבעיה bmaorlo  25.09.10 16:21 3
  הפתרון הכי ''קל'' bmaorlo  25.09.10 16:21 2
     אז זהו שאם זה AJAX הוא יכול אפילו לעשות EVAL Ice Cold  25.09.10 18:45 4
         כן נו סבבה bmaorlo  27.09.10 00:47 7
  אם מדובר נטו על AJAX akoka2 26.09.10 22:56 5
     לא הבנת את השאלה שלו bmaorlo  27.09.10 00:46 6
         וזה בדיוק מה שהצעתי לו. akoka2 27.09.10 20:36 8
             יופי אז החלפת פונקציה אסיכרונית אחת באחרת.ו...? Ice Cold  28.09.10 09:06 9
                 אם אני לא טועה, akoka2 28.09.10 14:05 10
                     אתה מדבר על בו זמנית והוא שואל על תור... איך זה מסתדר? Ice Cold  28.09.10 16:34 11
     אני לא מדבר פה נטו על AJAX.. אני מדבר בין היתר על שימוש Nokia 28.09.10 17:11 12

       
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   22:40   24.09.10   
אל הפורום  
  1. מה מונע ממך בסוף הריצה האסינכרונית של a פשוט  
בתגובה להודעה מספר 0
 
להריץ את b ?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות
   16:21   25.09.10   
אל הפורום  
  3. אולי בשבילו זה כל יפתור את הבעיה  
בתגובה להודעה מספר 1
 
   אבל בעקרון זה לא פרללי ובגלל זה למשל אנחנו בעבודה משתמשים בCALLBACK לחסוך זמן ריצה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות
   16:21   25.09.10   
אל הפורום  
  2. הפתרון הכי ''קל''  
בתגובה להודעה מספר 0
 
   שכל מתודה אסינכרונית תזדהה , אם זה AJAX למשל אז תעביר עוד פרמטר function=a לדוגמא , ולדאג שהSERVER SIDE שלך גם יחזיר את זה לJS בחזרה ואז תנתב.

עוד אופציה זה באמת לממש CALLBACK FUNCTION שזה פחות או יותר אותו עקרון רק שהPHP מנתב ובוחר איזה פונקציה JS להריץ.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   18:45   25.09.10   
אל הפורום  
  4. אז זהו שאם זה AJAX הוא יכול אפילו לעשות EVAL  
בתגובה להודעה מספר 2
 
אבל אם זו פונקציה שלא תלוייה ב-AJAX?
בכלל, כל העניין של קריאה של פונקציות אמורה להעשות בצד שלך, אתה אמור לדעת מתי לקרוא לפונקציה A או B מתישהוא...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות
   00:47   27.09.10   
אל הפורום  
  7. כן נו סבבה  
בתגובה להודעה מספר 4
 
   אבל אתה יכול לקבל בסיס להחלטה על משהו שמגיע מהSERVER .
ואם זה משהו שמגיע מהSERVER , אז אתה יכול לשלוח לו את זה בREQUEST ובעצם ליזום את מה שיחזור .
וככה לנהל מי קורא למה ומתי.

אתה צודק שימוש בEVAL ממש לא כדאי ובטח שלא למטרות האלה , בסיס לפרצות ובלאגן

אוהב אותך יניבוס.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   22:56   26.09.10   
אל הפורום  
  5. אם מדובר נטו על AJAX  
בתגובה להודעה מספר 0
 
   אתה יכול לבדוק את מצב הבקשה עם onreadystatechange event וככה לדעת מתי בקשה הסתיימה ולקרוא לפונקציה הבאה.

ד"א כתבת שאתה עובד עם HTML5 קצת, אז אולי Web Workers יכולים לעזור לך, http://dev.w3.org/html5/workers/

במידה ואפשר לדעת מתי Worker אחד סיים לעבוד, אז אתה יכול לדעת מתי להפעיל את הWorker הבא!

בהצלחה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bmaorlo 
חבר מתאריך 13.4.03
4770 הודעות
   00:46   27.09.10   
אל הפורום  
  6. לא הבנת את השאלה שלו  
בתגובה להודעה מספר 5
 
   הוא רוצה פרללי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   20:36   27.09.10   
אל הפורום  
  8. וזה בדיוק מה שהצעתי לו.  
בתגובה להודעה מספר 6
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   09:06   28.09.10   
אל הפורום  
  9. יופי אז החלפת פונקציה אסיכרונית אחת באחרת.ו...?  
בתגובה להודעה מספר 8
 
באותה מידה אפשר לדעת onreadystatechange של AJAX בדיוק כמו להמתין ל-WORKER...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   14:05   28.09.10   
אל הפורום  
  10. אם אני לא טועה,  
בתגובה להודעה מספר 9
 
   אתה יכול להפעיל כמה Workerים בו זמנית.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   16:34   28.09.10   
אל הפורום  
  11. אתה מדבר על בו זמנית והוא שואל על תור... איך זה מסתדר?  
בתגובה להודעה מספר 10
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Nokia
חבר מתאריך 1.7.02
538 הודעות
   17:11   28.09.10   
אל הפורום  
  12. אני לא מדבר פה נטו על AJAX.. אני מדבר בין היתר על שימוש  
בתגובה להודעה מספר 5
 
   בexecuteSql ופונקציות אסינכרוניות אחרות של HTML5 בשימוש בדאטהבייסים כמו הפונקציה לפתיחת טרנזקציה..

בכל מקרה בינתיים אלתרתי פתרון קצת מכוער כדי לעצב את הקוד בTOP DOWN וזה פשוט לייצר סוג של תור גלובלי של פונקציות ולהוסיף בתחילת הקוד את הפונקציות לתור ולקרוא לפונקציה שמתחילה להריץ אותו ואז מתוך הפונקציות החזרה האסינכרונית אני קורא פשוט לתור שיריץ את הפונקציה הבאה. זה בתכלס באמת כמו לקרוא מפונקציה אחת לשנייה רק שפה לא חשוב לי השם של הפונקציה במהלך הקריאה אלא אני פשוט קורא לתור והוא מעבד את הבקשה. לא אידיאלי אבל בינתייםראיתי שזה מה יש.. WEB WORKERS לא נראים לי כמו פתרון אלגנטי אז ויתרתי כרגע (זה לא קוד שאמור להיות Multi-Threaded).

תודה לכולם על העזרה!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net