Menu
CoddyTech

الوعود

جزء من قسم أساسيات 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