שאלה ב-node.js async.each
-
async.each(openFiles, function(file, callback) { // Perform operation on file here. console.log('Processing file ' + file); if( file.length > 32 ) { console.log('This file name is too long'); callback('File name too long');
לאן נשלח המחרוזת File name too long ?
ל-each שמפסיק לעבור לאיברים הבאים ומחזיר א"ז לפונקציה שהפעילה אותו?תודה!
פורסם במקור בפורום CODE613 ב08/09/2015 23:12 (+03:00)
-
במקרה הזה הפרמטר iterator הוא הפונקציה שיש להפעיל כל איטרציה - מעבר.
אם יש לך מערך של מספרים: 1,50,8,4 ואתה רוצה את הכפל של כל אחד בעצמו, אז אתה תשים בפרמטר איטרטור פונקציה שמקבלת פרמטר ומדפיסה את הכפל שלו בעצמו.
הcallback נשלח ע"י המפעיל, שזה המודול של async. נדמה לי שזוהי פונקציה שמקבלת פרמטר שמייצג שגיאה. הפונקציה מקבלת כל פעם את הקריאות אליה, ולבסוף (אחרי שעובדו כל האיברים) מפעילה את הפוקנציה של הפמטר השלישי callback ומשימה בפרמטר שלו את השגיאה הראשונה אם הייתה.פורסם במקור בפורום CODE613 ב09/09/2015 00:12 (+03:00)
-
ניסתי ליישם את מה שהבנתי
יש פה בעיות, אני יודע
אשמח אם תציץ על זה כמה רגעים ותצביע על שגיאות בולטותapp.post('/getajax2', function( req , res) { var words = req.body.sendWord; var indexElm = req.body.indexElm; db.getNikudEvent2( 'word', function( nikudim ) { if(!nikudim) res.status(404).send('Not found'); else var obj = { nikudim: nikudim, indexElm: indexElm }; res.send( obj ); }); }); exports.getNikudEvent2 = function ( words, send ) { var nikudim = []; var index = 0; if( typeof words == 'string' ) words = words.split(); async.each(words, function searchFromDb( word, next ) { //console.log('arguments: ', arguments) function pushNikud( nikud ) { console.log(next.toString()) console.log('push') nikudim.push(nikud); next(); } db.get(word, function (err, value) { console.log('get', word, value, index); if (err) { console.log('Ooops cnot get nikud for: ', word) ; var nWord = getMoreVariation( word, index ); if (nWord) { index++; console.log('try agein') if (5 == index) pushNikud(); searchFromDb( word, next ); } else { pushNikud(); } } value = value.split(','); index = 0; pushNikud( value ); }); } , function() { //console.log('finish each') //console.log('nikudim: ', nikudim) send( nikudim ); } ); };
פורסם במקור בפורום CODE613 ב09/09/2015 00:17 (+03:00)
-
נשגב מבינתי מדוע נוצרת כאן לולאה אינסופית
exports.getNikudEvent2 = function ( words, send ) { var nikudim = []; var index = 0; if( typeof words == 'string' ) words = words.split(); async.each(words, function( word, next ) { //console.log('arguments: ', arguments) var pushNikud = function( value ) { //console.log(next.toString()) if (value) console.log('push nikud') else console.log('push zero') if( value ) value = value.split(','); nikudim.push(value); index = 0; next(); } //console.log('gg1') searchFromDb( word, index=0 ) function searchFromDb( word, index ) { //console.log('gg2') db.get(word, function (err, value) { //console.log('gg3') console.log('get', word, value, index); if (err) { console.log('Ooops cnot get nikud for: ', word) ; var nWord = getMoreVariation( word ); if (nWord) { console.log('try agein') //console.log('gg4') //console.log(index) if (5 < index) pushNikud(); //console.log('gg5') searchFromDb( word, index++ ); //console.log('gg6') } else { pushNikud(); } } else { pushNikud( value ); } }); } } , function() { //console.log('finish each') //console.log('nikudim: ', nikudim) send( nikudim ); } ); };
פורסם במקור בפורום CODE613 ב09/09/2015 01:36 (+03:00)
-
קשה... קשה לעבור על קוד ולהבין מה רצו ומה קשור ועוד...
תעשה טוב ולך לאט לאט. אני מציע לא להשתמש בספריות עד שאתה מרגיש שולט לגמרי.
וכעת בעיות ברפרוף:
בקוד הראשון, המס' זה השורה:- 10,11 צריכים הקפת בלוק. כעת השורה 10 מותנית ושורה 11 מתקיימת בכל מקרה.
- 25,26 חסר נקודה פסיק
- 29 חסר סוגר לסגרית פרמטרי הפונקציה async.each
- 30 המשתנה word לא קיים בקוד קודם
- החל מ34 אני לא מבין כלום, ועכ"פ 43 לא ברור מה זה סוגר, נגמור בינתיים...
בקוד השני:
- 10,11,16 חסר נקודה פסיק
ועוד...
ראה אני בטוח שלא באת בשביל תיקונים כאלה אלא בשביל דברים יותר עמוקים, אבל הפיציפקס הללו מעכבים...
הרקורסיה אכן לא ברורה לי (צריך מידי לחשוב, נסה לפשט זאת) הבדיקה של הnWord לא נראית לי הגיונית.לדעתי אמורים להשתתף במבצע סה"כ ארבע פוקנציות. יותר מזה זה פיזור מבולגן.
רקורסיה זה לא מומלץ אם אתה מסתבך, אפשר באותה מידה ליצור מערך פונקציות במקום שאחת תקרא לעצמה.
תמשיך להתעקש ותצליח בגדול. בדוק.פורסם במקור בפורום CODE613 ב09/09/2015 13:07 (+03:00)
-
רקורסיה זה לא מומלץ אם אתה מסתבך, אפשר באותה מידה ליצור מערך פונקציות במקום שאחת תקרא לעצמה.
מערך פונקציות? שו הדא??
אתה כנראה לא מתכוון ללולאה רגילה, כיון שצריך שבכל פעם הפונקציה תרוץ רק אחרי הקודמת הסתיימה.פורסם במקור בפורום CODE613 ב20/09/2015 03:43 (+03:00)
-
נסיתי ליישם ולפשט
שכל דבר יהיה בפונציה נפרדת שיהיה ברור מה כל שלב עושה
יש בעיות, אבל עד כאן הצלחתיאת פונקצית searchForAjx מריץ פונקצית הAJAX שהנחתי שמיותר להביא אותה
function searchForAjx( words, sendToClint ) { //var words = ['word1', 'word2', 'word3']; async.each(words, searchNikudForParagraph, sendToClint ); } function searchNikudForParagraph( word ) { var nikudim = []; searchForOneWord( word, function ( nikudim ) { nikudim.push( nikudim ); }); } function searchForOneWord( word, pushNikudim ) { function searchFromDb( word, index ) { var _word = word; db.get( word, function (err, value) { if( err && index < 5 ) { _word = getVariations(_word); searchFromDb( _word, index++ ); } else { pushNikudim( value ); } }); } searchFromDb( word, 0 ); } function getVariations( nweWord ) { return nweWord; }
פורסם במקור בפורום CODE613 ב20/09/2015 03:44 (+03:00)
-
כפרה אמיתית לליל כפרות..
עובד יפה אבל הניקודים לא נכנסים לפי הסדר למערךexports.searchForAjx = searchForAjx; var nikudim; function searchForAjx( words, sendToClint ) { nikudim = []; //var words = ['word1', 'word2', 'word3']; async.each(words, searchNikudForParagraph, function() { sendToClint(nikudim); }); } function searchNikudForParagraph( word, next ) { searchForOneWord( word, function ( nikud ) { if( 'string' == typeof nikudim ) nikudim = nikudim.split(); nikud = nikud.split(','); nikudim.push( nikud ); next(); }); } function searchForOneWord( word, pushNikudim ) { function searchFromDb( word, index ) { var _word = word; db.get( word, function (err, value) { if( err && index < 5 ) { _word = getVariations(_word); index++; searchFromDb( _word, index ); } else { if( !value ) { var value = 'ללא ניקוד'}; pushNikudim( value ); } }); } var index = 0; searchFromDb( word, index ); } function getVariations( nweWord ) { return nweWord; }
פורסם במקור בפורום CODE613 ב21/09/2015 20:39 (+03:00)