@דוד ל.ט.
אתה צריך לשנות את החשיבה. מה שאתה מעלה זה בכלל לא חסרונות של JS, בנו אותו דוקא לזה.
באמת נראה לי ששאילתות כמו שלך מDB לא כדאי לבצע אסינכרוני, כי אתה לא רוצה תוצאה של כל הקודם זוכה אלא לפי הסדר (המילה מקורית ורק אח"כ וריאציה א' ורק אח"כ וריאציה ב').
כשרוצים לעשות לפי סדר בJS הכי טוב זה להשתמש עם רשימה. משהו כזה:
app.post("/", function (req, res) {
searchFromDb('word', function(result)
{
if(!result)
res.status(404).send('Not found');
else
res.send(result);
});
});
function searchFromDb(word, func) {
var searchVariation = { word, word, word};
var getFromDb = function(index) {
db.get(searchVariation[index], function (err, value) {
if(err)
{
if(index < searchVariation.length)
getFromDb(index++)
else
func();
}
else
{
func(value)
}
}
}
getFromDb(0);
}
באוסף searchVariation שמתי רשימה של אותה מילה אבל הכוונה לעשות וריאציות שונות. הבדיקה עליהם תופעל לפי סדר (רק במקרה כישלון של הראשון תתבצע בדיקה של השני).
אם עצם הכנת הוריאציות עולה ביצועים אתה יכול לוותר על רשימה אבל לעשות פונקציה שמקבלת את המקור ורשימה של מה שנוסה כבר ובודקת אם יש מה לנסות עוד.
במידה ויש לך וריאציות עם אותו עדיפות הכי טוב זה לשלוח אסינכרוני ו"כל הקודם זוכה" ככה אתה מרויח את מעלת הJS.
אוקי
אפשר למחוק פה עמוד שלם של שטויות שכתבתי
ברשותך, נחזור להתחלה
שאלות פשוטות של הבנה (שכמדומני שלאחריהם אחסוך ממכם הרבה שאלות נספות):
searchFromDb('word', function(result)
עד עכשיו חשבתי שפונקציות קול-בק זה קומבינה של פונקציות מסוימות, שמוגדר בהם לקרוא את הפונקציה השניה רק אחרי שמסיים
רק עכשיו (בזכות השורה הזו) אני קולט שזו השיטה הבסיסית לומר לJS לבצע פעולות בצורה סיכרונית.
לדוגמא אם אני רוצה להפעיל 3 פונקציות שכל אחת תופעל רק אחרי שהקודמת מסיימת, אני פותח פונקציה ומכניס כארגומנטים את שלושת הפונקציות.
הבנתי נכון?
עוד משהו שאני ממש משתומם
searchFromDb נמצא פעמיים ובכל פעם עם תוכן שונה בתוך ה-{ }.
אז בקריאה לפונקציה איזה מהם מתבצע??
אגב
mat ממשיך לטעון שמוכרחים להשתמש עם asinc.
פורסם במקור בפורום CODE613 ב08/09/2015 15:21 (+03:00)