await גורם לפעמים לפיצוץ הזכרון לג'יגות
-
זה הקוד
while( !this.tryFinish && !(data = await getData( this.Name )) ) { this.tryVariations() }לא תמיד, רק אם
getDataרץ יותר מדי פעמים
או שהפונקציה שמריצה אותה מורצת יותר מדי פעמים במקביל (מה שקורה ברצה אסינכרונית)
אם לא, זה אוכל א"ז ללא בעיה.יש לכם כיון מדוע זה קורה ומה הפתרון?
בעבר
tryVariationsהריץ בסופו, את הפונקציה שעוטפת את הקוד הזה, רקורסיה, אבל בשביל בשביל שהמחסנית לא תתמלא, הרצתי א"ז בתוך setTimeout.זה בדיוק מה שרציתי לחסוך, את השרשורים המבלבלים האלו.
-
const global1 = 1000000 const global2 = 2000000 const global3 = 3000000 const global4 = 4000000 const global5 = 5000000 const global6 = 6000000 class dbCtrl { static async getData( ...arg ) { let data = await new Promise( resolve => { setTimeout( resolve, 500 ) }) //db.get( ...arg ).catch( /*logIfBud*/ ) return data && data.toString('utf8').split(',') } } class dataCtrl { constructor( name ) { this.name = name } async getName() { let count = 0 let data while( !this.tryFinish && /*Temporary:*/ (count++) < 5000 && !(data = await dbCtrl.getData( this.name )) ) { this.tryVariations() } this.fullName = data return this.fullName } tryVariations() { this.name = this.name.replace(/"/g, '') } } class mainCtrl { constructor() { this.names = ['david', 'aharon'] } async getAllNames() { this.fullNames = await Promise.all( this.names.map( n=> new dataCtrl(n).getName() ) ) } } new mainCtrl().getAllNames()הקוד הזה עובד בסדר
אבל האמיתי לא
אולי בגלל שיש שם גלובלים שנכלאים (closer) ומשוכפלים בפונקציות?
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות