تخطَّ إلى المحتوى

util.promisify()

تحويل دالة callback إلى Promise util.promisify()

util.promisify() تحوّل دالة تتّبع نمط الخطأ-أولًا (err, result) إلى دالة تُرجع Promise، فتصبح قابلة للاستخدام مع async/await.

util.promisify(original) تأخذ دالة شرطها الوحيد أن آخر معامل فيها callback بنمط الخطأ-أولًا: (err, result) => {}، وتُرجع دالة جديدة بنفس المعاملات (بدون callback) تُرجع Promise يُحل (resolve) بـ result أو يُرفض (reject) بـ err.

مفيدة جدًا لتحديث دوال Node القديمة المبنية على callbacks (كثير من وحدات fs مثلًا) للعمل مع async/await دون إعادة كتابتها. ملاحظة: كثير من دوال fs الأساسية أصبح لها أصلًا نسخة Promise جاهزة عبر node:fs/promises، فلا تحتاج promisify معها يدويًا.

الصياغة

util.promisify(original)

📄 مثال

const { promisify } = require('node:util');
const fs = require('node:fs');

const readFileAsync = promisify(fs.readFile);

async function loadNotes() {
  try {
    const data = await readFileAsync('notes.txt', 'utf8');
    console.log(data);
  } catch (err) {
    console.error('فشلت القراءة:', err.message);
  }
}

loadNotes();

أهم المعاملات

المعاملالوظيفة
originalدالة تتّبع نمط الخطأ-أولًا: آخر معامل فيها callback(err, result)

💡 نصائح عملية

  • لدوال fs تحديدًا، فضّل node:fs/promises الجاهزة أصلًا بدل promisify اليدوي على النسخة القديمة

⚠️ أخطاء شائعة

  • استخدام promisify على دالة لا تتّبع نمط الخطأ-أولًا (مثل دالة callback بمعامل واحد فقط بدون خطأ) ينتج Promise يتصرف بشكل غير متوقَّع

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار NODEJS الكامل بالعربي.