Menu
CoddyTech

Promises

חלק מהיחידה יסודות Node.js במסלול ה-Node.js של Coddy. שיעור 15 מתוך 24.

קשה לעקוב אחרי קריאות חוזרות בתוך קריאות חוזרות, וכל אחת מהן חייבת לזכור לבדוק את err.

node:fs/promises מחזיר במקום זאת הבטחה: אובייקט שמייצג תוצאה שמתקבלת מאוחר יותר. .then(fn) מופעל עם התוצאה, .catch(fn) מופעל אם שלב כלשהו לפניו נכשל, ו-.finally(fn) מופעל בכל מקרה.

import { readFile } from 'node:fs/promises';

readFile('poem.txt', 'utf8')
    .then((text) => console.log(text.length + ' characters'))
    .catch(() => console.log('No poem today'))
    .finally(() => console.log('Bye'));

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

challenge icon

אתגר

קל
  • כתוב מחדש את count.js באמצעות readFile מתוך node:fs/promises ו־.then.
  • קובץ חסר מציג כעת את No notes yet, מתוך .catch.
  • Done עדיין מופיע אחרון, מתוך .finally.

הרץ את node count.js, ואז את node count.js nothere.json.

נסו בעצמכם

import fs from 'node:fs';

const file = process.argv[2] ?? 'notes.json';

console.log('Reading...');
fs.readFile(file, 'utf8', (err, text) => {
    if (err) {
        console.log(`Cannot read ${file}`);
    } else {
        console.log(`${JSON.parse(text).length} notes`);
    }
    console.log('Done');
});

כל השיעורים ביחידה יסודות Node.js