مرجع سريع

ورقة غش مكتبة الوعود Q.js Promises

دليل مرجعي سريع لمكتبة Q.js: مكتبة الوعود التاريخية لبيئة Node.js والمتصفح، تحويل دوال رد النداء nodebacks عبر nfcall، ومجمعات المصفوفات.

· تاريخ النشر

[!NOTE] مكتبة تاريخية: كانت مكتبة Q تنفيذاً تأسيسياً لمعيار Promises/A+ قبل توحيد وعود ES2015 الأصلية والكلمات المفتاحية async/await في محركات جافا سكريبت الحديثة.

Q هي مكتبة وعود (promises) شهيرة مصممة لكل من Node.js والمتصفحات.

إنشاء الوعود (Creating Promises)

const Q = require('q');

function asyncAction() {
  const deferred = Q.defer();

  fs.readFile('data.txt', 'utf8', (err, data) => {
    if (err) deferred.reject(err);
    else deferred.resolve(data);
  });

  return deferred.promise;
}

تحويل دوال رد النداء (Nodebacks)

توفر Q أدوات مساعدة لتحويل تواقيع دوال رد النداء القياسية في Node (err, result) إلى وعود:

const fs = require('fs');

// Q.nfcall: استدعاء دالة بنمط Node
Q.nfcall(fs.readFile, 'file.txt', 'utf-8')
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

// Q.denodeify: تغليف دالة رد النداء في دالة تُرجع وعداً
const readFile = Q.denodeify(fs.readFile);
readFile('file.txt', 'utf-8').then(console.log);

مجمعات المصفوفات (Array Combinators)

// Q.all: ينتظر حتى تكتمل جميع الوعود بنجاح
Q.all([stepA(), stepB()])
  .then(([resA, resB]) => {
    console.log(resA, resB);
  });

// Q.allSettled: ينتظر انتهاء الجميع بغض النظر عن النجاح أو الفشل
Q.allSettled([stepA(), stepB()])
  .then((results) => {
    results.forEach((r) => {
      if (r.state === 'fulfilled') console.log(r.value);
      else console.error(r.reason);
    });
  });

مراجع مفيدة

موضوعات ذات صلة