
getAllProductsAsync נבנית כפונקציה שמחזירה Promise עם resolve ו-reject, בלי להיות מסומנת async. כך הקונטרולר יכול לקרוא לה עם await.db.collection("products") נותן גישה לאוסף המוצרים.find() מחזיר אובייקט cursor, והופכים אותו למערך עם toArray.toArray מעבירים פונקציית callback. אם יש שגיאה קוראים ל-reject, ואחרת ל-resolve עם המוצרים.localhost:3000/api/product. מתקבלת רשימת כל המוצרים של Northwind שב-MongoDB.הטקסט המלא של הדקות הראשונות בהרצאה «שליפת כל המוצרים מתוך MongoDB» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו רוצים עכשיו להחזיר את כל המוצרים. בואו נעצור את המריצה ואנחנו נמצאים בפרודקטס לוג'יק. בפרודקטס לוג'יק אנחנו רוצים לשנות את הפונקציה get all products async כך שהיא לא תתייחס למה sql אלא תבצע את השימוש במונגו db בכדי להחזיר את כל המוצרים.
אז בואו ניפטר רגע מהתוכן שיש לה ונראה איך אנחנו בונים אותה. אז קודם כל היא כמובן אסינכרונית מפני שהיא ניגשת לדאטאבייס. הדבר הבא שאנחנו רוצים זה להחזיר promise.
resolve.reject. מפני שאנחנו מתעסקים עכשיו עם האובייקט הזה. האובייקט הזה מכיל את כל הגישה לדאטאבייס ויש לו כל מיני פונקציות אסינכרוניות.
אנחנו רוצים שיהיה פשוט לקרוא לפונקציות שלנו מהקונטרולר. אז אנחנו בונים אותם כאסינק עם פרומיס, האמת בלי אסינק, רק פרומיס, מפני שאנחנו רוצים שניתן יהיה לקרוא להם על ידי ה-wait ועל ידי אסינק.
אז בואו נראה מה אנחנו עושים פה. יש לנו db.collection, זה בעצם גישה לאוסף ספציפי. אנחנו רוצים לגשת לאוסף ה-products ואנחנו רוצים to find בתוך האוסף הזה את כל הרשומות.
ברגע שאנחנו רוצים את כל הרשומות, יש לנו פה אובייקט ריק. ואז אנחנו רוצים להפוך את זה למערך וברגע שהוא מסיים או שהוא אומר לנו שקיימת שגיאה או שהוא נותן לנו את כל המוצרים.
אז אנחנו יודעים שתופעל הפונקציה הזאת ובה אנחנו רוצים לדווח או כישלון או הצלחה. אם לא הצלחנו, הנה ה-reject