PracticU

קריאה וכתיבה לקובץ עם Promise

בלי כתוביותעם כתוביות
PracticU › קורס NodeJS › קריאה וכתיבה לקובץ עם Promise
מילון מושגים:
Promise - אובייקט ב-JavaScript שמייצג תוצאה עתידית של פעולה אסינכרונית, שתושלם בהצלחה או תיכשל.
אסינכרוני - אופן פעולה שבו פעולה ארוכה רצה ברקע והתוכנית ממשיכה בלי להמתין לה, ומטופלת כשתסתיים.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
שרת - מחשב או תוכנה שמספקים שירות למחשבים אחרים (לקוחות) ברשת, למשל אחסון קבצים, אתר אינטרנט או מסד נתונים, ומגיבים לבקשות שלהם.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.

קריאה וכתיבה לקובץ עם Promise
הסרטון מראה איך להעביר את פעולות הקובץ ל-Promises, כדי לעבוד איתן בעזרת async ו-await בלי קינון של callbacks.
מודול לפעולות הקובץ
1. קובץ נפרד: הפעולות נכתבות בקובץ files-handler.js שמשתמש במודול fs.
2. שלוש פונקציות: writeAsync, appendAsync ו-readAsync. הסיומת Async מסמנת פונקציה אסינכרונית, והיא מוסכמה בלבד.
3. עטיפה ב-Promise: כל פונקציה מחזירה new Promise. אם ה-callback מחזיר שגיאה, קוראים ל-reject עם השגיאה. אחרת קוראים ל-resolve.
4. readAsync: מקבל נתיב וקידוד, ומעביר את תוכן הקובץ דרך resolve.
5. ייצוא: שלוש הפונקציות נחשפות עם module.exports.
שימוש עם async ו-await
1. פונקציה אסינכרונית: writeAndRead מוגדרת כ-async ועוטפת את הקריאות ב-try/catch.
2. המתנה: כל קריאה נפתחת ב-await. התוכנית ממתינה לסיום הפעולה בלי לתקוע את התהליך, והשורה הבאה מתבצעת רק אחריה.
3. תוצאה: הקוד נראה כמו קוד סינכרוני רגיל, אבל הוא לא חוסם את השרת.
בהמשך מוצע תרגיל: פונקציה שמוודאת שתיקייה קיימת ויוצרת אותה אם לא, כ-Promise שממתינים לו.

פרקי ההרצאה: קריאה וכתיבה לקובץ עם Promise

  1. 00:00

    מעטפת Promise לכתיבה וקריאה מקובץ

  2. 01:03

    יצירת מודול file handler עם שלוש פונקציות

  3. 01:41

    מוסכמת סיום שם פונקציה ב-Async

  4. 02:55

    כתיבה לקובץ עם Promise ו-resolve reject

  5. 04:52

    טיפול בשגיאת callback בכתיבת הקובץ

  6. 06:13

    שכפול הפונקציה לקריאת קובץ

תמלול ההרצאה: קריאה וכתיבה לקובץ עם Promise

הטקסט המלא של הדקות הראשונות בהרצאה «קריאה וכתיבה לקובץ עם Promise» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אז אחרי שראינו איך אנחנו יכולים לכתוב ולקרוא מקובץ בשיטה אסינכרונית וגם קיבלנו קצת callback hell מזה, בואו נוציא את כל הסיפור הזה לפונקציות עם פרומיסים ואז נוכל לקרוא להם על ידי async ו-await ואז זה גם יהיה קוד אסינכרוני, הוא גם לא יתקע את הזרימה של התוכנית והוא גם בעצם יאפשר לנו לקרוא לו בעזרת ה-wait ואז הקוד הזה לא יהיה עם callback hell,

  2. 00:33

    והרבה יותר פשוט לעבודה. לצורך כך, בואו נצרף מודול חדש, נקרא לו files handler, הופה, files handler.javaScript, אני רגיל ל-ts-typescript, אז יצא לי שם ts כמעט, אבל אנחנו כרגע ב-JavaScript, ואנחנו רוצים, הופה, מה עשיתי? למה העתקתי את זה? את זה אני לא צריך,

  3. 01:06

    אנחנו כן רוצים בקובץ הזה את ה-file system. עכשיו בקובץ הזה אנחנו רוצים לבנות בעצם שלוש פונקציות. אחת עבור כתיבה, אחת עבור קריאה ואחת עבור append.

  4. 01:24

    אז בואו נתחיל לבנות אותם. יש לנו כאן function, נקרא לה write ונקבל את השם של הקובץ, file name, ונקבל את הדאטה לכתיבה. הרי אנחנו רוצים לכתוב את הדאטה לתוך ה-fining.

  5. 01:45

    עכשיו, לפני שאני אמשיך הלאה, בואו נבין שיש איזושהי מוסכמה מסוימת בכל מיני מערכות, לאו דווקא בכל הארגונים, אבל רואים את המוסכמה הזאת יותר ויותר, שאם פונקציה היא באמת אסינכרונית, נניח מחזירה ל-promise או מוגדרת כ-async ו-await, אז הרבה פעמים מסיימים אותה במילה async.

  6. 02:08

    זה לא משהו שראינו בנוד ג'יי אס עצמו, זה יותר משהו שמגיע מפונקציות שאנחנו כותבים, וגם יש כל מיני מערכות שאוטומטית המוסכמה הזאת נמצאת בהן, כמו לדוגמה דוט נט, אפילו שאין לנו שום קשר כרגע לדוט נט, אבל שמה באמת זאת מוסכמה מאוד ידועה, ולאט לאט מתחילים כן להשתמש עם המוסכמה הזאת, אז תחליטו אתם אם אתם רוצים לסיים את זה

  7. 02:36

    באסינק או לא, ו-node.js בדיוק עשו את ההפך, כל פונקציה שהיא לא מסתיימת אז היא אסינק, אבל בואו כרגע כן נבצע את זה, רק בשביל להבהיר לעצמנו שהפונקציה הזאת היא אסינכרונית.

  8. 02:51

    יש לנו כרגע פונקציה שמסוגלת לכתוב לקובץ. כל מה שאנחנו רוצים לעשות זה לכתוב בצורה אסינכרונית, אבל עם promise. אז נחזיר אובייקט promise, והאובייקט promise יקבל resolve rechecked, ואובייקט הפרומיס יבצע איזשהו, בוא נגיד פה, יש לנו פה איזשהו טריי קאץ', ויש לנו כאן בטריי, אני מנסה לבצע את הכתיבה על הקובץ, אולי

  9. 03:31

    הוא יקרוס, אולי הוא לא. לא, בעצם אם אני קורא לזה בצורה אסינכרונית, אז טריי קאץ' לא יעזור לי, טעות שלי. אז מה שאנחנו רוצים לעשות זה 0.writefile בצורה כזאת.

  10. 03:49

    הפאת' שלנו, האמת שאם זה נקרא path, אז בואו נקרא לזה גם path. ה-path שלנו זה מה שהתקבל לפונקציה, ה-data זה מה שהתקבל לפונקציה, וברגע שאנחנו מסיימים, אז אנחנו רוצים לדווח את ה-resolve בלי שום דבר, כדי שאין לנו בעצם מה לדווח.

  11. 04:18

    אם המערכת הזאת הייתה כן משדרת לנו הצלחה, ליתר דיוק כישלון, הנה אנחנו רואים ה-no param callback כן משדרת לנו, כישלון או מעולה, אז אנחנו יכולים לסדר את זה בצורה כזאת, אנחנו כן מקבלים error, אם error אז אנחנו רוצים to reject ולדווח את ה-error, אחרת אנחנו רוצים

  12. 04:52

    לדווח resolve, וזה אומר שאנחנו צריכים גם לתקן את הקוד הקודם, טעות, טעות שלי, לא קרה כלום. הקוד הזה כן מקבל כאן את הארורים האלה. רגע, בואו נסדר פה טיפה.

  13. 05:09

    זה מקבל ארור, ואנחנו כן צריכים טיפה לטפל בזה. רק אם יש לנו ארור, אז בואו נציג את הארור, ואפילו נעשה פה return שיהיה פחות קול בקהל.

  14. 05:33

    כאן אותו הסיפור, וכאן כן תמכנו בארור. יפה. אז זה משהו שהוא מאוד חשוב להסתכל עליו. ה-NOPARAM callback כן מקבלת אירור, ואז אם יש בעיה אנחנו מטפלים בה, כן, זה היה מאוד הגיוני, כי יכול להיות מצב שגם הקובץ לא יצליח לכתוב, אולי מישהו תפס את הקובץ, אז בסרטון הקודם הייתה לי טעות, אז הנה, תיקנו

  15. 06:04

    אותה, הכל בסדר. ואנחנו רוצים לגשת ל-File Handler ולהמשיך מכאן. אם יש לנו אירור, אז אנחנו מדווחים את השגיאה ואם הצלחנו אז אנחנו מדווחים הצלחה.

  16. 06:20

    כל זה זה רק פונקציה אחת שנקראת write async. בואו נשכפל אותה לפונקציה שנקראת read async ויש לנו שוב פעם path ואין לנו data כי

לקורס המלא: קורס NodeJS אונליין בעברית

ההרצאה הקודמת: קריאה וכתיבה אסינכרונית לקובץ ב-NodeJS

ההרצאה הבאה: תכנות מונחה עצמים ב-NodeJS

הרצאות קשורות מקורסים אחרים

  • הגבלת קריאה וכתיבה של משתמשים על דיסק USB
  • קריאה ל-Stored Procedure
  • שמירה של Canvas לקובץ
  • העברת Interceptors לקובץ נפרד

קורסים נוספים במסלול

  • קורס יסודות HTML - בניית אתר אינטרנט פשוט
  • קורס CSS 3 - בדגש על Flex & Grid
  • קורס Javascript כולל JQuery
  • קורס ג'אווה סקריפט מעשי - JavaScript
  • קורס TypeScript
  • קורס ריאקט - React