Referencia rápida

Chuleta de Promesas con Q.js

Guía rápida de Q.js: la histórica librería de Promises para Node.js y navegadores, conversión de nodebacks mediante nfcall y combinadores de arrays.

· Publicado

[!NOTE] Librería histórica: Q fue una implementación fundamental del estándar Promises/A+ antes de que las promesas nativas de ES2015 y async/await se estandarizaran en los motores JavaScript.

Q es una librería de promesas diseñada para Node.js y navegadores web.

Creación de 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;
}

Conversión de Nodebacks (Callbacks de Node.js)

Q proporciona utilidades para convertir las firmas estándar de callback de Node (err, result) en promesas:

const fs = require('fs');

// Q.nfcall: Llamada a función de estilo Node
Q.nfcall(fs.readFile, 'file.txt', 'utf-8')
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

// Q.denodeify: Convierte una función de callback en una que devuelve una promesa
const readFile = Q.denodeify(fs.readFile);
readFile('file.txt', 'utf-8').then(console.log);

Combinadores de arrays

// Q.all: Espera a que todas las promesas se resuelvan con éxito
Q.all([stepA(), stepB()])
  .then(([resA, resB]) => {
    console.log(resA, resB);
  });

// Q.allSettled: Espera a que todas finalicen sin importar si tuvieron éxito o fallo
Q.allSettled([stepA(), stepB()])
  .then((results) => {
    results.forEach((r) => {
      if (r.state === 'fulfilled') console.log(r.value);
      else console.error(r.reason);
    });
  });

Referencias

Temas relacionados