
async ו-await בלי קינון של callbacks.files-handler.js שמשתמש במודול fs.writeAsync, appendAsync ו-readAsync. הסיומת Async מסמנת פונקציה אסינכרונית, והיא מוסכמה בלבד.new Promise. אם ה-callback מחזיר שגיאה, קוראים ל-reject עם השגיאה. אחרת קוראים ל-resolve.resolve.module.exports.writeAndRead מוגדרת כ-async ועוטפת את הקריאות ב-try/catch.await. התוכנית ממתינה לסיום הפעולה בלי לתקוע את התהליך, והשורה הבאה מתבצעת רק אחריה.הטקסט המלא של הדקות הראשונות בהרצאה «קריאה וכתיבה לקובץ עם Promise» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז אחרי שראינו איך אנחנו יכולים לכתוב ולקרוא מקובץ בשיטה אסינכרונית וגם קיבלנו קצת callback hell מזה, בואו נוציא את כל הסיפור הזה לפונקציות עם פרומיסים ואז נוכל לקרוא להם על ידי async ו-await ואז זה גם יהיה קוד אסינכרוני, הוא גם לא יתקע את הזרימה של התוכנית והוא גם בעצם יאפשר לנו לקרוא לו בעזרת ה-wait ואז הקוד הזה לא יהיה עם callback hell,
והרבה יותר פשוט לעבודה. לצורך כך, בואו נצרף מודול חדש, נקרא לו files handler, הופה, files handler.javaScript, אני רגיל ל-ts-typescript, אז יצא לי שם ts כמעט, אבל אנחנו כרגע ב-JavaScript, ואנחנו רוצים, הופה, מה עשיתי? למה העתקתי את זה? את זה אני לא צריך,
אנחנו כן רוצים בקובץ הזה את ה-file system. עכשיו בקובץ הזה אנחנו רוצים לבנות בעצם שלוש פונקציות. אחת עבור כתיבה, אחת עבור קריאה ואחת עבור append.
אז בואו נתחיל לבנות אותם. יש לנו כאן function, נקרא לה write ונקבל את השם של הקובץ, file name, ונקבל את הדאטה לכתיבה. הרי אנחנו רוצים לכתוב את הדאטה לתוך ה-fining.
עכשיו, לפני שאני אמשיך הלאה, בואו נבין שיש איזושהי מוסכמה מסוימת בכל מיני מערכות, לאו דווקא בכל הארגונים, אבל רואים את המוסכמה הזאת יותר ויותר, שאם פונקציה היא באמת אסינכרונית, נניח מחזירה ל-promise או מוגדרת כ-async ו-await, אז הרבה פעמים מסיימים אותה במילה async.
זה לא משהו שראינו בנוד ג'יי אס עצמו, זה יותר משהו שמגיע מפונקציות שאנחנו כותבים, וגם יש כל מיני מערכות שאוטומטית המוסכמה הזאת נמצאת בהן, כמו לדוגמה דוט נט, אפילו שאין לנו שום קשר כרגע לדוט נט, אבל שמה באמת זאת מוסכמה מאוד ידועה, ולאט לאט מתחילים כן להשתמש עם המוסכמה הזאת, אז תחליטו אתם אם אתם רוצים לסיים את זה
באסינק או לא, ו-node.js בדיוק עשו את ההפך, כל פונקציה שהיא לא מסתיימת אז היא אסינק, אבל בואו כרגע כן נבצע את זה, רק בשביל להבהיר לעצמנו שהפונקציה הזאת היא אסינכרונית.
יש לנו כרגע פונקציה שמסוגלת לכתוב לקובץ. כל מה שאנחנו רוצים לעשות זה לכתוב בצורה אסינכרונית, אבל עם promise. אז נחזיר אובייקט promise, והאובייקט promise יקבל resolve rechecked, ואובייקט הפרומיס יבצע איזשהו, בוא נגיד פה, יש לנו פה איזשהו טריי קאץ', ויש לנו כאן בטריי, אני מנסה לבצע את הכתיבה על הקובץ, אולי
הוא יקרוס, אולי הוא לא. לא, בעצם אם אני קורא לזה בצורה אסינכרונית, אז טריי קאץ' לא יעזור לי, טעות שלי. אז מה שאנחנו רוצים לעשות זה 0.writefile בצורה כזאת.
הפאת' שלנו, האמת שאם זה נקרא path, אז בואו נקרא לזה גם path. ה-path שלנו זה מה שהתקבל לפונקציה, ה-data זה מה שהתקבל לפונקציה, וברגע שאנחנו מסיימים, אז אנחנו רוצים לדווח את ה-resolve בלי שום דבר, כדי שאין לנו בעצם מה לדווח.
אם המערכת הזאת הייתה כן משדרת לנו הצלחה, ליתר דיוק כישלון, הנה אנחנו רואים ה-no param callback כן משדרת לנו, כישלון או מעולה, אז אנחנו יכולים לסדר את זה בצורה כזאת, אנחנו כן מקבלים error, אם error אז אנחנו רוצים to reject ולדווח את ה-error, אחרת אנחנו רוצים
לדווח resolve, וזה אומר שאנחנו צריכים גם לתקן את הקוד הקודם, טעות, טעות שלי, לא קרה כלום. הקוד הזה כן מקבל כאן את הארורים האלה. רגע, בואו נסדר פה טיפה.
זה מקבל ארור, ואנחנו כן צריכים טיפה לטפל בזה. רק אם יש לנו ארור, אז בואו נציג את הארור, ואפילו נעשה פה return שיהיה פחות קול בקהל.
כאן אותו הסיפור, וכאן כן תמכנו בארור. יפה. אז זה משהו שהוא מאוד חשוב להסתכל עליו. ה-NOPARAM callback כן מקבלת אירור, ואז אם יש בעיה אנחנו מטפלים בה, כן, זה היה מאוד הגיוני, כי יכול להיות מצב שגם הקובץ לא יצליח לכתוב, אולי מישהו תפס את הקובץ, אז בסרטון הקודם הייתה לי טעות, אז הנה, תיקנו
אותה, הכל בסדר. ואנחנו רוצים לגשת ל-File Handler ולהמשיך מכאן. אם יש לנו אירור, אז אנחנו מדווחים את השגיאה ואם הצלחנו אז אנחנו מדווחים הצלחה.
כל זה זה רק פונקציה אחת שנקראת write async. בואו נשכפל אותה לפונקציה שנקראת read async ויש לנו שוב פעם path ואין לנו data כי