الوعود
جزء من قسم أساسيات 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 فيؤدي إلى انهيار البرنامج.
التحدي
سهل- أعِد كتابة
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');
});