async ב - forEach
-
@dovid אמר בasync ב - forEach:
אקיצער, אין טעם לעשות async+await בפונקציית הmap. אלא יש להשתמש בפוקנציה רגיל שמחזירה פרומייז ואח"כ לעשות Promise.all.
כלומר כך:
var values = [1,2,3,4,5,6,7,8,9].map(function(row){ return new Promise((reslove) => setTimeout(() => reslove(row*2), Math.random()*2000) ); }); Promise.all(values).then(function(newlist){ console.log(newlist) ; });
יש לך מושג אם הפונקציה שבתוך ה-map רצה על כל האיטרציות במקביל או שהם ממתינים אחת על השניה?
-
@אהרן אמר בasync ב - forEach:
יש לך מושג אם הפונקציה שבתוך ה-map רצה על כל האיטרציות במקביל או שהם ממתינים אחת על השניה?
זה
console.time('test1') var values = [1,2,3,4,5,6,7,8,9].map(function(row){ return new Promise((reslove) => { var rndom = Math.random()*2000; console.log(rndom) ; setTimeout(() => reslove(row*2), rndom) }); }); Promise.all(values).then(function(newlist){ console.timeEnd('test1') console.log(newlist); });
מוכיח שבמקביל.
-
מה אתם אומרים על זה:
function asyncMap(task) { return Promise.all( this.map(function(row){ return new Promise((reslove) => { task(row, reslove); }); }) ); } Array.prototype.asyncMap = asyncMap; [1,2,3,4,5,6,7,8,9].asyncMap( function(row, reslove){ setTimeout(() => reslove( row*2), Math.random()*3000); }) .then(function(newlist){ console.log(newlist); });
-
@אהרן אמר בasync ב - forEach:
@dovid אמר בasync ב - forEach:
להוסיף return
בשביל מה?
צודק, טעיתי בקריאת הקוד.
-
כשיש הרבה פונקציות משורשרות, פרומיס מאוד נוח, כיון שאפשר להריץ אותם שורה אחרי שורה באמצעות פונקצית then, וכך מקבלים מעין מפתח,
במקום לקרוא להם אחד מתוך השני.אבל בשביל זה
צריך פונקציה דומה שבכל איטרציה תריץ מערך של פונקציות שירוצו אחד אחרי השני,
שאפשר יהיה להריץ כך:[1,2,3,4,5,6,7,8,9].asyncMap( [func1, func2, func3] ) .then(function(newlist){ console.log(newlist); });
מה אומרים, אפשרי?