الوعود
جزء من قسم أساسيات 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 في تعطّل البرنامج.
التحدي
سهلتفتح هذه الخطوة مشروع أداة سطر الأوامر للملاحظات التي أعدّها المقرر، وليس ملفات مشروعك من درس 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
1تشغيل JavaScript على Node
مرحبًا يا Nodeقراءة الأمروسائط سطر الأوامرالأوامر4البرمجة غير المتزامنة في Node
استخدام نتيجة دالة الاستدعاءدوال الاستدعاءنتيجة Promiseعندما يفشل Promiseالوعودانتظار قيمةAsync وAwaitقراءتان مستقلتانPromise.allحلقة الأحداثالمؤقتاتتدرّب بنفسك: Playground لـ Express