Callbacks
חלק מהיחידה יסודות Node.js במסלול ה-Node.js של Coddy. שיעור 18 מתוך 33.
קריאת קובץ גדול אורכת זמן, ותוכנית שממתינה לו לא עושה בינתיים שום דבר אחר.
fs.readFile(path, 'utf8', callback) מתחילה את הקריאה וחוזרת מיד. כשהקובץ נטען, Node קוראת לפונקציית callback שלך עם (err, text). err היא null במקרה של הצלחה, ומכילה שגיאה אחרת, לכן בדוק אותה תחילה. כל מה שזקוק לטקסט צריך להיכלל בתוך פונקציית callback.
import fs from 'node:fs';
fs.readFile('poem.txt', 'utf8', (err, text) => {
if (err) {
console.log('No poem today');
return;
}
console.log(text.split('\n').length + ' lines');
});
console.log('Asked for the poem');Asked for the poem מודפס ראשון: השורה שאחרי readFile רצה בזמן שהקובץ עדיין נטען.
אתגר
קלבשיעור הזה נפתח דוגמה חדשה לספירה באמצעות callback בקובץ count.js, ולא בקובצי כלי ההערות שלך מהשיעור טיפול בשגיאות. הקבצים שסופקו, notes.json, notes.js ו-store.js, כלולים; העבודה הקודמת שלך נשארת שמורה בשיעור משלה.
קריאה של קובץ גדול אורכת זמן. עם callback, Node יכול לבצע בינתיים עבודה אחרת, ולקרוא לקוד שלך בחזרה כשהקובץ מוכן. תרגל את זה בתוכנית קטנה ונפרדת, count.js, שסופרת את ההערות בקובץ.
count.jsכבר מדפיס אתReading...ויודע איזה קובץ לקרוא:fileהוא המילה שמקלידים אחריnode count.js, אוnotes.jsonאם לא מקלידים דבר.- קרא את הקובץ הזה באמצעות
fs.readFileו-callback. כל מה שמופיע בהמשך מתרחש בתוך ה-callback. - אם הקריאה הצליחה, הפוך את הטקסט למערך באמצעות
JSON.parse. הדפס כמה הערות יש במערך, ואחריהןnotes. ספור את ההערות במערך, ולא את שורות הקובץ. הקובץnotes.jsonמתחיל עם שתי הערות, לכן תדפיס2 notes. - אם הקריאה נכשלה, כלומר השגיאה של ה-callback אינה
null, הדפסCannot readואחריו את שם הקובץ, במקום את מספר ההערות. - בשני המקרים, הדפס את
Doneבסוף, גם כן מתוך ה-callback.
הפקודה node count.js מדפיסה:
Reading...
2 notes
Doneהפקודה node count.js nothere.json מדפיסה:
Reading...
Cannot read nothere.json
Doneנסה זאת: השיעור הזה מריץ את count.js, לכן הטרמינל מציג $ node count.js. לחץ על Run כשהתיבה ריקה, והתוכנית תקרא את notes.json. לאחר מכן הקלד nothere.json בתיבה ולחץ על Enter, כדי לקרוא קובץ שאינו קיים.
נסו בעצמכם
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// קראו את הקובץ באמצעות fs.readFile ופונקציית callback.
// הדפיסו את מספר ההערות, ואז Done.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות Node.js
1הרצת JavaScript ב-Node
שלום, Nodeקריאת הפקודהארגומנטים של שורת הפקודהפקודותתרגלו בעצמכם: Express אונליין