@dovid אמר בשימוש ב-MongoDB בנוד:
למה לא להכניס את כל טעינת האפליקציה לקאלבק?
לחזור לטרום ימי הפרומיז?
@dovid אמר בשימוש ב-MongoDB בנוד:
למה לא להכניס את כל טעינת האפליקציה לקאלבק?
לחזור לטרום ימי הפרומיז?
@yossiz אמר בשימוש ב-MongoDB בנוד:
הפיתרון הוא לכאורה להחזיר אובייקט שיעטוף את ה-
db
. כל פונקציה שנקרא על העטיפה יעשה קודםawait
לאובייקט ה-db
האמיתי ואז יעביר את הפונקציה הלאה לאובייקט האמיתי.האם יש דרך לעשות עטיפה כזאת בלי יותר מדי boilerplate? פשוט להגיד ל-JS שכל פונקציה שאני יקרא על האובייקט לא משנה מה השם שלו יעבור דרך קוד העטיפה?
לא מבין את הבעיה
הקלאס מיד חוזר מכיל בתוכו את ה-DB
ופונקצית insert({1:2})
יכיל בתוכו בדיקה אם ה-DB מחובר, ומחזיר תמיד פרומיז.
כך תמיד עושים?!
@יוסף-בן-שמעון אמר בג'ימייל - ההודעה לא נשלחה:
לעיתים רחוקות אני מקבל הודעה כזו בשליחת מייל
ולא מועיל לנסות שוב ושוב, גם רענון של הדף לא עוזר, מה זה?
זה בדר"כ בגלל תו נסתר לפני\אחרי הכתובת
נסה ללכת לסוף\תחילת הכתובת ואז מעד אחד עם החץ תגלה שיש שם תו נסתר.
(גודל פשוט לא יודעים למחוק אותו דאאא)
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
למה שלא תעצב שהם יחזירו בעצמם פרומייז
לא אוהב את העטיפה של הפרומיז סביב כל הפונקציה
וגם שיש כבר פונקציות מוכנות שעבדו עם הספריה async, אז זה מוכן לפונקציה הזאת.
במקרה שכן קצר יותר להשתמש ישירות ב-Promise.all.
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אההממ אז המתודות הללו נדפקות בכל קלאבק ששייך לסקופ שונה?
גם כשקאלבק שייך לאותו סקופ
הוא מקבל סקופ חדש, של יצירת asyncMap.
אם כשמעבירים את זה כפונקציה ללא call זה עובד
זה לא
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.
איפה צריך this.
בתוך ה-task
כשקוראים לו מתוך מתודה של מופע שמשתמשים יותר ב-this, זה יותר חסר.
במקרה הזה, ה-task עצמו הוא גם מתודה של המופע.
@dovid
אויש כמה שטויות
התכוונתי להביא את ההוכחה מ-setTimeout
אבל אז גליתי שהוא מקבל את ה-this בגלל הפונקציה האנונימית שכתובה מתוך הפונקציה שקוראת וממילא מקבלת את ה-this
setTimeout( _=> myFunc() )
אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.
@יוסף-בן-שמעון אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אז תעביר אותו כפרמטר
איך console.log כן מכניס את הדיס הנכון?
~~ככה!! ~~
const asyncMap = (arr, task) => Promise.all(
arr.map((row, idx, arr) => new Promise((reslove) => task.call(null ,row, reslove, idx, arr)).catch(console.log))
)
נראה שה-this של הגלובל סקופ הוא undefined
צריך לאפס אותו ל-null
נראה שטעיתי, רגע
@יוסף-בן-שמעון
להיות מסוגל להשתמש בthis של המופע שקורא לפונקציה הנ"ל.
@יוסף-בן-שמעון אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן תעשה שכל המחלקות שלך יירשו ממחלקת אם עם הפונקציה הזו
זו האפשרות היחידה?
@yossiz אמר במדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?:
לא בדיוק הבנתי את המטרה הסופית, אבל אם אתה רוצה ירושה, תשתמש ב-extends
extends לא יוצר הורשה היררכית
אלא מיזוג בין 2 הפרוטוטייפ
לא הצלחתי בנתיים ליצור הורשה היררכית (שאם יש אותו שם מתודה לפרוטוטייפ האב והבן, ישתמש עם הבן).
@שואף פרטנר פתוח.
@yossiz אמר במדוע מאפיינים של קלאס נרשמים על המופע עצמו ולא רק על הפורופוטייפ כמו מתודות?:
לא בדיוק הבנתי את המטרה הסופית, אבל אם אתה רוצה ירושה, תשתמש ב-
extends
הבעיה שיש להם מתודות בעלי שמות זהים
לכן אני רוצה את ההצמדות לאוביקט האבא על אוביקט נפרד במופע הנוכחי.
@yossiz אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
פונקצית החץ לא אמור ליצור א"ז?
לא. הפוך, פונקציית חץ אין לו this של עצמו אלא של ה-scope שמסובב אותו.
נסיתי לשנות א"ז לפונקציות רגילות ולא עזר.
אפשר להשתמש ב-function.apply כדי לאגוד את הפונקציה לאובייקט שאתה רוצה.
עשיתי א"ז ע"י bind, אבל לא נוח להוסיף א"ז לכל הרצה של הפונקציה.
לגודמא
מקבל רשימת שמות מהקלינט
ומייצר מכל שם אוביקט המכיל פרטים נוספים הקשורים לשם
פונקציה שמוסיפה חוצצים למספרי הטלפון, נכון לרשום בקלאס?
ומצביע לDB (שמשמש למציאת הפרטים הקשורים לשם), גם?
בפונקציה הזו, למשל, אני לא יכול להשתמש ב-this של מופע חדש שאני מייצר
const asyncMap = (arr, task) => Promise.all(
arr.map((row, idx, arr) => new Promise((reslove) => task(row, reslove, idx, arr)))
);
פונקצית החץ לא אמור ליצור א"ז?
class newObj {
constructor() {}
property1 = 5
property2 = 6
method1() {}
method2() {}
}
newObj \\ {property1: 5, property2: 6}
נכון יותר לשאול אם אפשר ואיך בשביל שזה לא יקרה?
זה 'מספים' את האוביקט
שאלה נוספת, ישנה דרך להוסיף מתודות או מאפיינים לפרוטוטייפ אחרי יצירת המופע?
class sonObj {
constructor( father ) {
this.father = father
}
property1 = 5
property2 = 6
method1() {}
method2() {}
}
class fatherObj {
constructor() {
this.son = new sonObj( this )
}
property1 = 5
property2 = 6
method1() {}
method2() {}
}
במקרה זה ה-this של האבא נרשם כמאפיין של כל מופע, אני רוצה שזה ישב על הפרוטוטייפ, אבל אני לא יכול לרשום א"ז בתוך הקלאס, כי אז ה-this הזה עדיין לא קיים.
יש פתרון??
@yossiz
נראה לי פשוט
$('#youElement').text( msg );
אתה צריך לעדכן באם תשנה את שם הקלאס, או לשכפל באם תרצה עדכון בעוד אלמנטים.
במקום להתעסק עם עם הקוד
msg = "Good night ";