
appendFile מופעל רק בתוך ה-callback של הכתיבה.utf-8), וה-callback מקבל שני ערכים: שגיאה ותוכן הקובץ.async ו-await.הטקסט המלא של הדקות הראשונות בהרצאה «קריאה וכתיבה אסינכרונית לקובץ ב-NodeJS» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז בסרטון הקודם ראינו איך אנחנו יכולים לבצע כתיבה וקריאה מקובץ בשיטה סינכרונית ואנחנו רוצים כרגע לראות איך לבצע את זה בשיטה אסינכרונית.
זה הקוד של השיטה הסינכרונית אבל לפני שנגיע לשיטה האסינכרונית, מה קורה אם יש פה איזושהי בעיה והקוד לא באמת מצליח להתבצע? נניח אני רוצה לקרוא קובץ אבל אולי הוא לא קיים.
בואו ננסה רגע, נמחק את הקובץ הזה, נוריד את שתי השורות האלה וננסה לראות מה קורה ונקבל איזושהי קריסה. אז לא טיפלנו כאן במקרים שהתוכנית לא מצליחה להתבצע ולפני שאני הולך לשיטה האסינכרונית אני באמת רוצה כן לטפל בזה כי יכול להיות שהצלחנו לכתוב, הצלחנו לכתוב ובין שתי השורות האלה מישהו מחק את
הקובץ בצורה אוטומטית אולי ואז התוכנית נכשלת אז כמובן הטיפול הוא יהיה מאוד פשוט. טראי קאץ' והצגת המסג' של השגיאה בכדי שהתוכנית לא באמת תקרוס לנו ואז היא תפסיק להתבצע לכל הלקוחות.
בואו נסתכל על זה רגע. נוריד שוב פעם את שני החבר'ה האלה והתוכנית לא קרסה, הוא רק מציג לנו את הודעת השגיאה, זאת אומרת שכרגע הכתיבה והקריאה הסינכרונים עובדים כמו שצריך ואחרי שטיפלנו בזה כמו שצריך, אנחנו יכולים כאן לראות איך אפשר לבצע בדיוק את אותו הדבר בשיטה אסינכרונית.
בהתחלה אנחנו נעשה את זה ממש עם הפונקציות שנותנים לנו, ולאחר מכן ננסה להפוך את זה לפרומיסים, בכדי שנוכל לעבוד עם זה בצורה קצת יותר שפויה, מה שנקרא.
דבר ראשון, יש לנו את ה-FS, בואו רק נוריד את הקוד הזה, נקודה, והדבר הראשון שרצינו זה writefile, אז אני פשוט הולך ל-Write File בלי הסיומת סינק.
ואני רואה שהוא בעצם מבקש ממני שוב פעם את הנתיב, בסדר, זה זה. והדבר הבא שהוא מבקש ממני זה את הדאטה. מה הדאטה? אני ממש רוצה את אותו הדבר, אז הנה הדאטה שאני רוצה לכתוב, בואו ניתן לו.
אבל אנחנו יודעים שכל הפונקציות בעצם מקבלות callback בשביל לציין לנו הצלחה, כישלון, אולי מחזירות לנו מידע אז כאשר אני כותב לקובץ אני לא מקבל שום דבר בחזרה אבל כן יש callback שימו לב שזה no param callback שהיא לא מחזירה לי בעצם מידע מה היא כן מחזירה
לי? ארור היא אומרת לי האם יש הצלחה או כישלון האמת שזה בעסיקלי נמצא בהעמסה אחרת אולי בואו נסתכל רגע על זה לא זה זה אז הוא אמור להחזיר לי אם יש הצלחה או כישלון no params callback?
לא, זו טעות שלי. הפונקציה callback בעצם היא no param callback, היא לא מקבלת בכלל ארגומנטים. אז בואו נקרא לה בצורה כזאת.
אבל היא כן מציינת לנו מתי הפעולה הסתיימה. למה? כי אם היא לא הסתיימה, אני לא יכול לבצע עכשיו עוד פעולה. אני לא יכול לבצע כאן איזושהי כתיבה לפונקציה, לקובץ, לפני שאם אני אנסה לכתוב כאן לקובץ, אז אולי זה לא יסיים את הכתיבה. נניח שפה רציתי לכתוב משהו מאוד מאוד גדול, וכאן רציתי לכתוב משהו יותר קטן,
והמשהו הגדול עדיין לא הסתיים, ואני בא ומתחיל לכתוב את המשהו הקטן, וזה נכנס באמצע של המשהו הגדול, וזה יכול להיות בלאגן שלם. זאת אומרת, אני צריך לסיים את הכתיבה, ורק אז אני יכול לעשות את הפעולה הבאה.
מקודם הפעולה הבאה שרצינו לבצע זה append, אז בואו נבצע את זה כאן. אז יש לנו 0 נקודה, הפנד פייל. שוב פעם, לאיזה קובץ אתה רוצה לכתוב? זה היה אותו הקובץ בדיוק.
בואו נשים אותו פה. ולאחר מכן, מה הדאטה שאתה רוצה? זה היה זה. This is another line. ולבסוף, שוב פעם, אני אגיד לך מתי אני אסיים ואז תעשה מה שאתה רוצה רק כאשר אני אסיים.
אז בואו נגיד לו בבקשה, הנה פונקציה. כאן אתה הולך לסיים ושימו לב שכבר אנחנו מתחילים להגיע ל-callback hell. All right, נשאר לנו דבר אחרון וזה לקרוא את הקובץ שכתבנו ואז יהיה לנו בעצם שלוש שורות.
שורה ראשונה, שורה שנייה, שורה שלישית. איך אנחנו קוראים אותו? 0.readfile, לא את הגרסה הסינק ולכן יש לנו את הגרסה הסינק. מה הנתיב?
כאן שוב פעם את אותו הקובץ, אני יכול להעתיק אותו מכל אחת מההגדרות האלה. ומה הקידוד שאנחנו רוצים?