איך מתמודדים עם asinc ב-javascript
-
ובכלל איך רקורסיה עוזרת בפונקציה אי סינכרונית?
הלולאה יכולה להסתיים לפני תשובת הקול-בק הראשונה, ואז להתחיל לענות תשובות שלא לפי הסדר!הנקודה פה היא ההפעלה של הפונקציה הבאה רק אחרי שחוזר מהcallback תשובה שלילית. הנקודה היא לא הרקורסיה, הרקורסיה זה סתם בגלל שהפונקציונליות חוזרת על עצמה.
פורסם במקור בפורום CODE613 ב08/09/2015 15:50 (+03:00)
-
מה עושה
func(value)
מריץ את הפונקציה שעכשיו רצה (רקורסיה)?לא, אדרבא זה יציאה מרקורסיה. הfunc זה הפרמטר השני, של הפונקציה searchFromDb. זה הcallback לapp.post.
אני הכרתי את המחלקה של הasync והיא אכן שימושית מאוד אבל לא נדרשת למקרה שלך שהוא מקרה קלאסי של nodejs. וודאי שאין צורך באיוונטים.
תמיד תמיד הפעלה של הפונקציה הבאה בארגומנט עוצרת את הפונקציה הנוכחית?
ממש לא.
לא הבנתי.
יש שם פונקצייה (getFromDb ) של פניה לDB. התוצאה חוזרת לפונקציה נוספת (אנונימית). היא בודקת את התוצאה. ישנו if שהודק אם ישנה שגיאה של ערך לא נמצא. במידה ואכן ישנה שגיאה, מורצת הפונקציה העליונה שוב - מה שנקרא רקורסיה. אם אין שגיאה - ישנו ערך, אז מוחזר הערך ע"י הפעלת הפונקציה שניתנה כארגומנט (func).פורסם במקור בפורום CODE613 ב08/09/2015 15:55 (+03:00)
-
משתגע
אולי אני כ"כ מטומטם
אבל בטוח שאני מפספס משהו מאוד בסיסיif(index < searchVariation.length) getFromDb(index++) else func();
func() שווה ל'אל תעשה כלום'?
באותה מידה השורה היתה יכולה להיות ריקה?func(value)
ואז מה קורה? לאן זה נשלח/חוזר??
לא אלאה מלומר שוב: תודה!
פורסם במקור בפורום CODE613 ב08/09/2015 16:12 (+03:00)
-
תסתכל בהודעה המקורית שלי.
יש שתי קטעי קוד. אתה מדבר על הקטע השני שם יש פונקציה בשם searchFromDb, היא מקבלת שתי ארגומנטים: מילה לחיפוש ופונקציית קלבאק, כלומר "מה לעשות אחרי" הצלחה או כישלון.
הfunc() זה הפעלה של הפונקציה שמועברת כארגומנט השני. במקרה שלנו הערך האקטואלי שלה חשוף בקטע קוד הראשון: שם אני קורא לפונקציה searchFromDb ואני מזין לפרמטר הראשון סתם טקסט לבדיקה, ולשני פוקנציה שהיא זו שתופעל לבסוף. היא מקבלת בקטע השני את השם func כי זה שם הארגומנט השני.
מקוה שהבנת, אשמח לעזור עוד אז אל תרפה. רק תדייק מה אתה מבין ומה לא.פורסם במקור בפורום CODE613 ב08/09/2015 16:24 (+03:00)
-
func() שווה ל'אל תעשה כלום'?
באותה מידה השורה היתה יכולה להיות ריקה?אם לא הייתי כותב כלום, אז כלום לא היה קורא והלקוח (הבקשה מהדפדפן) לעולם לא הייתה נענית.
ע"י הפעלה של הfunc ללא פרמטר מורצת השורה הזו:res.status(404).send('Not found');
תוכל לראות איך ע"י עיון בקטע קוד הראשון.
פורסם במקור בפורום CODE613 ב08/09/2015 16:28 (+03:00)
-
ברור שאני מסתכל על הקוד המקורי
מאיפה אני מעתיק ועל מה אני שואל ?
@דוד ל.ט.func() שווה ל'אל תעשה כלום'?
באותה מידה השורה היתה יכולה להיות ריקה?אם לא הייתי כותב כלום, אז כלום לא היה קורא והלקוח (הבקשה מהדפדפן) לעולם לא הייתה נענית.
ע"י הפעלה של הfunc ללא פרמטר מורצת השורה הזו:res.status(404).send('Not found');
תוכל לראות איך ע"י עיון בקטע קוד הראשון.
כאילו כתוב
func = function(arg) { return arg }
וזו הסיבה שהפונקציה מחזירה את הערך לפונקציה שהפעילה אותה?
איך הקסם הזה נהיה לבד?פורסם במקור בפורום CODE613 ב08/09/2015 17:09 (+03:00)
-
@דוד ל.ט.
תסתכל בהודעה המקורית שלי.
יש שתי קטעי קוד. אתה מדבר על הקטע השני שם יש פונקציה בשם searchFromDb, היא מקבלת שתי ארגומנטים: מילה לחיפוש ופונקציית קלבאק, כלומר "מה לעשות אחרי" הצלחה או כישלון.
הfunc() זה הפעלה של הפונקציה שמועברת כארגומנט השני. במקרה שלנו הערך האקטואלי שלה חשוף בקטע קוד הראשון: שם אני קורא לפונקציה searchFromDb ואני מזין לפרמטר הראשון סתם טקסט לבדיקה, ולשני פוקנציה שהיא זו שתופעל לבסוף. היא מקבלת בקטע השני את השם func כי זה שם הארגומנט השני.
מקוה שהבנת, אשמח לעזור עוד אז אל תרפה. רק תדייק מה אתה מבין ומה לא.נראה שלא הובנתי
אנסה לשאול את אותה שאלה על דוגמא סתמית
אני רואה את זה דומה לדוגמא הלא אפשרית הבאה:var aaa =function() { console.log('111') } aaa() { console.log('222') }הרי כתבת searchFromDb('word', function(result) { if(!result) res.status(404).send('Not found'); else res.send(result); });
ש[לכאורה] בדיוק כמו
var searchFromDb = function('word', function(result) { if(!result) res.status(404).send('Not found'); else res.send(result); });
אז איך אח"כ אתה מריץ אותה עם תוכן אחר בתוך הסקופ????
פורסם במקור בפורום CODE613 ב08/09/2015 17:16 (+03:00)
-
הדוגמה שהבאת לא ברור לי מה היא ממחישה
בא נתרכז בשאלה שלך, לתוך הפונקציה של ה searchFromDb נשלחו שתי פרמטרים האחד זה המילה לחיפוש והשני הוא משתנה שמכיל פונקציה
לפונקצית החיפוש יש לוגיקה פנימית שלפיה היא מחליטה איך להריץ את הפונקציה שיש בתוך המשתנהפורסם במקור בפורום CODE613 ב08/09/2015 17:29 (+03:00)