Referință rapidă

Ghid Rapid Promisiuni cu Q.js

Ghid rapid de referință pentru Q.js: biblioteca istorică de promisiuni pentru Node.js și browsere, conversia funcțiilor callback prin nfcall și combinatori de tablouri.

· Publicat

[!NOTE] Bibliotecă istorică: Q a fost o implementare de referință a standardului Promises/A+ înainte ca promisiunile native ES2015 și async/await să fie standardizate în motoarele JavaScript.

Q este o bibliotecă de promisiuni creată pentru Node.js și browsere.

Crearea promisiunilor

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;
}

Conversia funcțiilor Nodeback (Callback-uri Node.js)

Q oferă utilitare pentru a converti semnăturile standard de callback din Node (err, result) în promisiuni:

const fs = require('fs');

// Q.nfcall: Apelarea unei funcții în stil Node
Q.nfcall(fs.readFile, 'file.txt', 'utf-8')
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

// Q.denodeify: Împachetează o funcție callback într-una care returnează o promisiune
const readFile = Q.denodeify(fs.readFile);
readFile('file.txt', 'utf-8').then(console.log);

Combinatori de tablouri

// Q.all: Așteaptă rezolvarea cu succes a tuturor promisiunilor
Q.all([stepA(), stepB()])
  .then(([resA, resB]) => {
    console.log(resA, resB);
  });

// Q.allSettled: Așteaptă finalizarea tuturor indiferent de rezultat
Q.allSettled([stepA(), stepB()])
  .then((results) => {
    results.forEach((r) => {
      if (r.state === 'fulfilled') console.log(r.value);
      else console.error(r.reason);
    });
  });

Referințe

Subiecte conexe