איך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?
-
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
אבל ב-asyncMap זה לא שייך מכיון שצריך להכניס ארגומנטים לתוך הקול-בק.
איפה צריך this.
בתוך ה-task
כשקוראים לו מתוך מתודה של מופע שמשתמשים יותר ב-this, זה יותר חסר.
במקרה הזה, ה-task עצמו הוא גם מתודה של המופע. -
@אהרן אההממ אז המתודות הללו נדפקות בכל קלאבק ששייך לסקופ שונה?
אם כשמעבירים את זה כפונקציה ללא call זה עובד, אז ככה אמור לעבוד יופי:const asyncMap = (arr, task) => Promise.all( arr.map((row, idx, arr) => new Promise(reslove => task(row, reslove, idx, arr)).catch(console.log)) )
אני אישית בחיים לא פונה לthis הארור של js...
-
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
@אהרן אההממ אז המתודות הללו נדפקות בכל קלאבק ששייך לסקופ שונה?
גם כשקאלבק שייך לאותו סקופ
הוא מקבל סקופ חדש, של יצירת asyncMap.אם כשמעבירים את זה כפונקציה ללא call זה עובד
זה לא
-
@dovid אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
למה שלא תעצב שהם יחזירו בעצמם פרומייז
לא אוהב את העטיפה של הפרומיז סביב כל הפונקציה
וגם שיש כבר פונקציות מוכנות שעבדו עם הספריה async, אז זה מוכן לפונקציה הזאת.במקרה שכן קצר יותר להשתמש ישירות ב-Promise.all.
-
@אהרן לא הבנתי את הסיטואציה אז אני לא יודע מה היתה הבעיה שלך והאם היא כבר נפתרה. רק דבר אחד אני יכול להגיד, כשאתה מעביר קולבק בצורה כזו:
callToFunc(this.callback)
הקולבק מתנתק מהאבא שלו, והוא לא יזהה את הזיס שלו.
אם זו הבעיה שלך, הפיתרון הוא להעביר את הקולבק כך:callToFunc(() => this.callback())
-
@יוסף-בן-שמעון אמר באיך אני מייצר פונקציה בגלובל שה-this שלה יהיה ה-this של המופע שמפעיל אותו?:
אם זו הבעיה שלך, הפיתרון הוא להעביר את הקולבק כך:
callToFunc(() => this.callback())
או כך:
callToFunc(function() { return this.callback() })
(אני רק מבהיר שזה לא קשור לפונקציות חצים.) -
@yossiz לא מדויק, בצורה שכתבת אתה בכלל לא מעביר קולבק כי בפונקציה האנונימית שלך כבר יש זיס עצמי, צריך להעביר אותו עם פונקצית חץ, תריץ את הקוד הזה ותראה את שלש ההדפסות:
function callToFunc (callback) { callback() } class Class { constructor() { callToFunc(this.callback) callToFunc(() => this.callback()) callToFunc(function () { return this.callback() }) } callback () { console.log(this) } } new Class()
-
@יוסף-בן-שמעון צודק לגמרי. הייתי צריך לכתוב כך:
const thisObj = this; callToFunc(function() { return thisObj.callback() })