Menu
CoddyTech

الوعود

جزء من قسم أساسيات Node.js في رحلة Node.js على Coddy. الدرس 21 من 33.

يصعب تتبّع الاستدعاءات الراجعة داخل استدعاءات راجعة أخرى، ويجب على كل واحدة منها تذكّر التحقق من 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

التحدي

سهل

تفتح هذه الخطوة مشروع أداة سطر الأوامر للملاحظات التي أعدّها المقرر، وليس ملفات مشروعك من درس Callbacks (بما فيها count.js). يبقى عملك السابق في درسه الخاص. اقرأ الملفات المقدمة قبل تعديل count.js. تحتوي هذه النسخة على مثال غير متزامن لعدّ الملاحظات.

  • أعد كتابة count.js باستخدام readFile من node:fs/promises و.then.
  • عند فقدان الملف، ستُطبع الآن No notes yet باستخدام .catch.
  • يظل Done آخر ما يُطبع، باستخدام .finally.

شغّل node count.js، ثم node count.js nothere.json.

من دون وسيطة، يكون الناتج Reading...، ثم 2 notes، ثم Done، كلٌّ في سطر مستقل. عند استخدام nothere.json، يكون السطر الأوسط No notes yet.

جرّب بنفسك

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

تدرّب بنفسك: Playground لـ Express