PracticU

קריאה וכתיבה אסינכרונית לקובץ ב-NodeJS

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

קריאה וכתיבה אסינכרונית לקובץ ב-NodeJS
בסרטון הזה רואים איך כותבים לקובץ ומקריאים ממנו בשיטה אסינכרונית ב-Node.js, ומה קורה כשמשהו נכשל באמצע.
כתיבה וקריאה בלי לחסום את התוכנית
1. writeFile אסינכרוני: הפונקציה מקבלת נתיב, מידע ו-callback. ה-callback בלי פרמטרים ומודיע רק שהכתיבה הסתיימה.
2. סדר הפעולות: אי אפשר להתחיל כתיבה נוספת לפני שהקודמת הסתיימה, כי התוכן עלול להתערבב. לכן appendFile מופעל רק בתוך ה-callback של הכתיבה.
3. readFile עם קידוד: מקבלים נתיב וקידוד (utf-8), וה-callback מקבל שני ערכים: שגיאה ותוכן הקובץ.
4. טיפול בשגיאות: try/catch לא תופס שגיאה אסינכרונית, כי הפעולה מתבצעת אחרי שהקוד הסתיים. צריך לבדוק את פרמטר השגיאה בכל callback ולטפל בו.
הבעיה: קינון של callbacks
שלוש הפעולות האלה, כתיבה, הוספה וקריאה, נכתבות זו בתוך זו, וזה קשה לקריאה ולתחזוקה. הסרטון הבא מראה איך להפוך אותן ל-Promises ולעבוד איתן בעזרת async ו-await.
השיעור הבא בקורס: קריאה וכתיבה לקובץ עם Promise

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

  1. 00:00

    טיפול בשגיאות בכתיבה וקריאה סינכרונית

  2. 01:42

    כתיבה לקובץ בשיטה אסינכרונית עם callback

  3. 02:55

    הבנת פונקציית ה-callback ללא פרמטרים

  4. 04:06

    סדר הכתיבה והוספת שורה עם appendFile

  5. 05:01

    קריאת הקובץ עם readFile ובחירת קידוד

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

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

  1. 00:02

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

  2. 00:14

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

  3. 00:29

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

  4. 00:57

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

  5. 01:19

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

  6. 01:51

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

  7. 02:03

    דבר ראשון, יש לנו את ה-FS, בואו רק נוריד את הקוד הזה, נקודה, והדבר הראשון שרצינו זה writefile, אז אני פשוט הולך ל-Write File בלי הסיומת סינק.

  8. 02:22

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

  9. 02:43

    אבל אנחנו יודעים שכל הפונקציות בעצם מקבלות callback בשביל לציין לנו הצלחה, כישלון, אולי מחזירות לנו מידע אז כאשר אני כותב לקובץ אני לא מקבל שום דבר בחזרה אבל כן יש callback שימו לב שזה no param callback שהיא לא מחזירה לי בעצם מידע מה היא כן מחזירה

  10. 03:04

    לי? ארור היא אומרת לי האם יש הצלחה או כישלון האמת שזה בעסיקלי נמצא בהעמסה אחרת אולי בואו נסתכל רגע על זה לא זה זה אז הוא אמור להחזיר לי אם יש הצלחה או כישלון no params callback?

  11. 03:26

    לא, זו טעות שלי. הפונקציה callback בעצם היא no param callback, היא לא מקבלת בכלל ארגומנטים. אז בואו נקרא לה בצורה כזאת.

  12. 03:39

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

  13. 04:06

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

  14. 04:19

    מקודם הפעולה הבאה שרצינו לבצע זה append, אז בואו נבצע את זה כאן. אז יש לנו 0 נקודה, הפנד פייל. שוב פעם, לאיזה קובץ אתה רוצה לכתוב? זה היה אותו הקובץ בדיוק.

  15. 04:35

    בואו נשים אותו פה. ולאחר מכן, מה הדאטה שאתה רוצה? זה היה זה. This is another line. ולבסוף, שוב פעם, אני אגיד לך מתי אני אסיים ואז תעשה מה שאתה רוצה רק כאשר אני אסיים.

  16. 04:53

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

  17. 05:10

    שורה ראשונה, שורה שנייה, שורה שלישית. איך אנחנו קוראים אותו? 0.readfile, לא את הגרסה הסינק ולכן יש לנו את הגרסה הסינק. מה הנתיב?

  18. 05:24

    כאן שוב פעם את אותו הקובץ, אני יכול להעתיק אותו מכל אחת מההגדרות האלה. ומה הקידוד שאנחנו רוצים?

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

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

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

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

  • הגבלת קריאה וכתיבה של משתמשים על דיסק USB
  • ביטול משימה אסינכרונית
  • קריאה ל-Stored Procedure
  • עבודה עם GCD - עבודה אסינכרונית ב-Xcode

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

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