פעולה סינכרונית nodejs
-
ייתכן שאני על הכיון הנכון.
הקוד הזה עבד לי טובvar promises = []; for (let i =0;i<3;i++) { console.log('files'+i); promises.push(ftp.list('/limudklali/' + HDate.getFullYear() + '/' + Month_arr[HDate.getMonth()] + '/')); } Promise.all(promises).then(function(values) { ftp.end(); console.log(values); });והפלט היה:
files0 files1 files2 [ [ { type: '-', name: '20190506.wav', target: undefined, sticky: false, rights: [Object], acl: false, owner: 'ftp', group: 'ftp', size: 680204, date: 2019-05-05T21:08:00.000Z }, { type: '-', name: '20190507.wav', target: undefined, sticky: false, rights: [Object], acl: false, owner: 'ftp', group: 'ftp', size: 749004, date: 2019-05-07T05:17:00.000Z }], [ { type: '-', name: '20190506.wav', target: undefined, sticky: false, rights: [Object], acl: false, owner: 'ftp', group: 'ftp', size: 680204, date: 2019-05-05T21:08:00.000Z }, { type: '-', name: '20190507.wav', target: undefined, sticky: false, rights: [Object], acl: false, owner: 'ftp', group: 'ftp', size: 749004, date: 2019-05-07T05:17:00.000Z }], [ { type: '-', name: '20190506.wav', target: undefined, sticky: false, rights: [Object], acl: false, owner: 'ftp', group: 'ftp', size: 680204, date: 2019-05-05T21:08:00.000Z }, { type: '-', name: '20190507.wav', target: undefined, sticky: false, rights: [Object], acl: false, owner: 'ftp', group: 'ftp', size: 749004, date: 2019-05-07T05:17:00.000Z }]]שזה אומר שמצד אחד הלולאה רצה מיידית על הכל, ומצד שני רק בסיום הלולאה יש לי את התוצאות.
השאלה היא א"כ מה הכי פרקטי שמצד אחד יש לי את הנתונים לביצוע העיבוד, ומצד שני יש לי מערך של כל הפרומיסים עבור ה Promise.all.
האם יש משהו בJS הצבת משתנה ששמו דינאמי, כמו בPHP למשל:${'num' . $i} = $ftp->list('/limudklali/' + HDate.getFullYear() + '/' + Month_arr[HDate.getMonth()] + '/'); print ${'num' . $i};בהדפסת משתנה בתוך מחרוזת ראיתי שזה קיים גם בJS
res.end(` my num is: ${'num' + i}, good by`);אבל לא הצלחתי לעשות הצבת משתנה בסגנון זה.
תודה -
@חוקר אמר בפעולה סינכרונית nodejs:
השאלה היא א"כ מה הכי פרקטי שמצד אחד יש לי את הנתונים לביצוע העיבוד, ומצד שני יש לי מערך של כל הפרומיסים עבור ה Promise.all.
האם יש משהו בJS הצבת משתנה ששמו דינאמי, כמו בPHP למשל:לא הבנתי את המשפטים והקשר ביניהם.
@dovid אמר בפעולה סינכרונית nodejs:
@חוקר אמר בפעולה סינכרונית nodejs:
השאלה היא א"כ מה הכי פרקטי שמצד אחד יש לי את הנתונים לביצוע העיבוד, ומצד שני יש לי מערך של כל הפרומיסים עבור ה Promise.all.
האם יש משהו בJS הצבת משתנה ששמו דינאמי, כמו בPHP למשל:לא הבנתי את המשפטים והקשר ביניהם.
אני חשבתי על כיון של הצבת משתנה עבור כל לולאה נניח בשם
'num' + iובמקביל ליצור מערך שדוחפים אליו את השמות הדינאמים.
ואז להעביר לPromise.all את המערך של שמות המשתנים שעליו להמתין עד שיגמרו את פעילותם. -
זה גם הלך לי.
האם יש רעיון יותר טובvar promises = []; for (let i =0;i<3;i++) { console.log('files'+i); global['files'+i] = (ftp.list('/limudklali/' + HDate.getFullYear() + '/' + Month_arr[HDate.getMonth()] + '/')); promises.push(global['files'+i]); } Promise.all(promises).then(function(values) { ftp.end(); console.log(values); });כאן הלולאה עובדת מצויין, הכל מבוצע במקביל, ומצד שני יש לי Promise.all בסיום
-
זה גם הלך לי.
האם יש רעיון יותר טובvar promises = []; for (let i =0;i<3;i++) { console.log('files'+i); global['files'+i] = (ftp.list('/limudklali/' + HDate.getFullYear() + '/' + Month_arr[HDate.getMonth()] + '/')); promises.push(global['files'+i]); } Promise.all(promises).then(function(values) { ftp.end(); console.log(values); });כאן הלולאה עובדת מצויין, הכל מבוצע במקביל, ומצד שני יש לי Promise.all בסיום
-
@חוקר מה באת להרויח כאן?
בשני המקרים אתה מחזיק מערך של כל הפרומיסים, ואז קורא לו בפונקציה promise.all.
אלא שעכשיו גם הוספת את זה למערך גלובאלי נוסף.. בשביל מה?@avr416 אמר בפעולה סינכרונית nodejs:
@חוקר מה באת להרויח כאן?
בשני המקרים אתה מחזיק מערך של כל הפרומיסים, ואז קורא לו בפונקציה promise.all.
אלא שעכשיו גם הוספת את זה למערך גלובאלי נוסף.. בשביל מה?כדי שיהיה לי גישה אח"כ לעיבוד הנתונים.
אני צריך אפשרות לעבד כל אחת מהתוצאות.
את העיבוד אני יעשה בתוך ה promise.all.
בראשון הכל נכנס לתוך מערך בלי שיהיה לי את השם של התוצאה ואז אין לי איך לעבד את התוצאה לכל אחד, לדעת של מי כל תוצאה. -
@avr416 אמר בפעולה סינכרונית nodejs:
@חוקר מה באת להרויח כאן?
בשני המקרים אתה מחזיק מערך של כל הפרומיסים, ואז קורא לו בפונקציה promise.all.
אלא שעכשיו גם הוספת את זה למערך גלובאלי נוסף.. בשביל מה?כדי שיהיה לי גישה אח"כ לעיבוד הנתונים.
אני צריך אפשרות לעבד כל אחת מהתוצאות.
את העיבוד אני יעשה בתוך ה promise.all.
בראשון הכל נכנס לתוך מערך בלי שיהיה לי את השם של התוצאה ואז אין לי איך לעבד את התוצאה לכל אחד, לדעת של מי כל תוצאה. -
@חוקר
אם global הוא אובייקט, אתה יכול להמיר אותו למערך ולהעביר אותו ישירות לפרומיס.all וא"צ ליצור עוד מערך של פרומיסס.Promise.all(Object.keys(global).map(k=>global[k]))זה אמור להחזיר לך מערך של כל הפרומיסים שדחפת לגלובל
-
@חוקר
אם global הוא אובייקט, אתה יכול להמיר אותו למערך ולהעביר אותו ישירות לפרומיס.all וא"צ ליצור עוד מערך של פרומיסס.Promise.all(Object.keys(global).map(k=>global[k]))זה אמור להחזיר לך מערך של כל הפרומיסים שדחפת לגלובל
@avr416 אמר בפעולה סינכרונית nodejs:
@חוקר
אם global הוא אובייקט, אתה יכול להמיר אותו למערך ולהעביר אותו ישירות לפרומיס.all וא"צ ליצור עוד מערך של פרומיסס.Promise.all(Object.keys(global).map(k=>global[k]))זה אמור להחזיר לך מערך של כל הפרומיסים שדחפת לגלובל
בכל מקרה, אני חוזר בי..
הדרך שלך עדיפה מבחינת ביצועים על ההצעה שלי. כי אתה עשית הכל בלולאה אחת, ואני הוספתי לך כאן עוד כמה (מאחורי הקלעים..) -
@חוקר אם אתה רוצה בתוצאת הפרומיס נתון נוסף ממה שהוא מחזיר במקור, אתה יכול להוסיף את הנתון בthen שבעצם יוצר פרומייז נוסף בהסתיים הראשון:
var promises = []; for (let i =0;i<3;i++) { console.log('files'+i); var pr = ftp.list($`/limudklali/${HDate.getFullYear()}/${Month_arr[HDate.getMonth()]}/`) .then(x => { return {source: i, result: x} })); promises.push(pr); } Promise.all(promises).then(function(values) { ftp.end(); console.log(values); }); -
@חוקר אם אתה רוצה בתוצאת הפרומיס נתון נוסף ממה שהוא מחזיר במקור, אתה יכול להוסיף את הנתון בthen שבעצם יוצר פרומייז נוסף בהסתיים הראשון:
var promises = []; for (let i =0;i<3;i++) { console.log('files'+i); var pr = ftp.list($`/limudklali/${HDate.getFullYear()}/${Month_arr[HDate.getMonth()]}/`) .then(x => { return {source: i, result: x} })); promises.push(pr); } Promise.all(promises).then(function(values) { ftp.end(); console.log(values); });
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות