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) ומשוכפלים בפונקציות?