Promise.all
חלק מהיחידה יסודות Node.js במסלול ה-Node.js של Coddy. שיעור 25 מתוך 33.
קריאות בלתי תלויות יכולות לספק חלקים שונים של תוצאה אחת. התחילו את שתי הפעולות, המתינו לתוצאות שלהן, ואז השתמשו בכל תוצאה למטרה שלה.
const [forecast, location] = await Promise.all([
readFile('forecast.txt', 'utf8'),
readFile('location.txt', 'utf8'),
]);
console.log(location + ': ' + forecast);סדר התוצאות תואם למערך הקלט, גם אם הקריאה השנייה מסתיימת ראשונה. כלי ההערות שלכם קורא במקום זאת את ההערות ואת הגדרת התצוגה. הפונקציה המוכנה readJson מטפלת בקבצים חסרים ופגומים. עיצוב מספרי ההערות לפני היפוך שורות התצוגה מבטיח ששינוי התצוגה לעולם לא ישנה את ההערה שמספר מסוים מזהה.
אתגר
קלבשלב הזה נפתח פרויקט כלי שורת הפקודה להערות שהוכן עבור הקורס, ולא את קובצי הפרויקט שלך מתוך Async and Await (כולל store.js). העבודה הקודמת שלך נשארת בשיעור משלה. קרא את הקבצים שסופקו לפני עריכת store.js. העותק הזה מכיל את הפקודות להערות, קורא JSON וקובץ תצורה.
כלי ההערות זקוק כעת גם ל-notes.json וגם ל-settings.json. פונקציית העזר שסופקה, readJson(name, fallback), שומרת על הטיפול הקיים בשגיאות קבצים.
- ב-
store.js, החלף את מצייני המקום הריקים בתוצאות קריאת שני הקבצים יחד באמצעותPromise.all. אם קובץ ההערות חסר, משתמשים ב-[]; אם קובץ ההגדרות חסר, משתמשים ב-{}. - ב-
notes.js, ענףlistכבר יוצר שורות ממוספרות. כאשר הערך שלstore.settings.sortהואnewest, הפוך את סדר השורות האלה לפני ההדפסה. כל הגדרה אחרת תשאיר את הסדר המקורי.
נסה את list: אחרי Notes for you, צפה לקבל 2. Call Ada, 1. Buy milk. שנה את ההגדרה ל-oldest ונסה שוב: אותם מספרים יופיעו בסדר עולה. החזר את ההגדרה ל-newest לפני הבדיקה.
נסו בעצמכם
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
const readJson = async (name, fallback) => {
if (!existsSync(name)) {
return fallback;
}
try {
return JSON.parse(await readFile(name, 'utf8'));
} catch (err) {
console.error(`${name} is damaged: ${err.message}`);
process.exit(1);
}
};
// החליפו את מצייני המקום האלה בשתי התוצאות של readJson.
const notes = [];
const settings = {};
const store = {
notes,
settings,
async save() {
await writeFile(file, JSON.stringify(this.notes, null, 2));
},
async add(text) {
this.notes.push(text);
await this.save();
return this.notes.length;
},
async remove(n) {
const [text] = this.notes.splice(n - 1, 1);
await this.save();
return text;
},
};
export default store;
כל השיעורים ביחידה יסודות Node.js
1הרצת JavaScript ב-Node
שלום, Nodeקריאת הפקודהארגומנטים של שורת הפקודהפקודותתרגלו בעצמכם: Express אונליין