JS תגובה אסינכרונית
-
תשובה בודדת - Promise (זה מובנה בשפה, להמשך עיון), ניתן באמצעות callback (היינו פונקציה שתטפל במידע) שמעבירים לthen, וניתן באמצעות הסינטקס של async\await (שזה לא שימושי בכל המקרים, אבל בהחלט נוח)
אתה יכול לטפל בכמה תגובות באמצעות Observables מספריית RxJS
-
מתקשה לממש את -Promise. ממה שהבנתי Promise מקבל בקונסטרקטור 2 פרמטרים: resolve מופעל במקרה של הצלחה, reject במקרה של כישלון.
כעת הנה הקוד שכתבתי בסביבת אנגולר:
אני מנסה ליצור Promise שעד 10 שניות תוחזר שגיאה ומ-10 ומעלה זו תהיה הצלחה.errorMessege: string = "Promise error !"; myPromise = new Promise((resolve, reject) => { // Perform some async operation setTimeout(() => { const data = this.errorMessege; reject(data); }, 0); setTimeout(() => { const data = this.successMessege; resolve(data); }, 10000); }); consumePromise() { this.myPromise.then((data) => { console.log(data); }).catch((error) => { console.error(error); }); }
זה הכפתור שמנסה לצרוך את Promise
<button (click)=consumePromise()>consume</button>
מה שקורה בפועל זה:
א. מיד שאני טוען את הדף מופיע לי שגיאה של ה-Promise בקונסול
ב. לא משנה מתי אני לוחץ על הכפתור תמיד הוא יתן שגיאה.אשמח להסבר, תודה רבה.
-
@yyy כתב בJS תגובה אסינכרונית:
אני מנסה ליצור Promise שעד 10 שניות תוחזר שגיאה ומ-10 ומעלה זו תהיה הצלחה.
מהמילים האלה נראה חוסר הבנה לגבי פרומייס.
פרומייס מייצג משימה חד פעמית.
המשימה רצה פעם אחת בלבד, ויש לה תוצאה אחת ומצב אחד בלבד.
המצב הינו אחד משלושת האפשרויות: בריצה, הצליח, נכשל.
משימה שהצליחה היא לעולם לא נכשלה ולהיפך.
הפרמטרים resolve, reject הם קריאות לפונקציה מתאימה למקרה הצלחה/כישלון, והם חייבות להיקרא פעם אחת בלבד עבור פרומייז. למן הרגע שתכתוב בפרומייז קריאה לresolve המשימה הוכתרה בהצלחה והיא לעולם לא תיחשב כנכשלה ולהיפך.