Référence rapide

Aide-mémoire Promesses Q.js (Promises)

Guide de référence rapide pour Q.js : la bibliothèque historique de promesses pour Node.js et navigateurs, conversion de callbacks avec nfcall et combinateurs.

· Publié le

[!NOTE] Bibliothèque historique: Q était une implémentation fondatrice de Promises/A+ avant que les promesses natives ES2015 et async/await ne soient intégrées aux moteurs JavaScript.

Q est une bibliothèque de promesses conçue pour Node.js et les navigateurs.

Créer des promesses

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

Conversion des Nodebacks (Callbacks Node.js)

Q fournit des utilitaires pour convertir les callbacks classiques de Node (err, result) en promesses :

const fs = require('fs');

// Q.nfcall : Appel de fonction Node
Q.nfcall(fs.readFile, 'file.txt', 'utf-8')
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

// Q.denodeify : Enveloppe une fonction de callback en une fonction retournant une promesse
const readFile = Q.denodeify(fs.readFile);
readFile('file.txt', 'utf-8').then(console.log);

Combinateurs de tableaux

// Q.all : Attend la résolution avec succès de toutes les promesses
Q.all([stepA(), stepB()])
  .then(([resA, resB]) => {
    console.log(resA, resB);
  });

// Q.allSettled : Attend la fin de toutes les promesses quel que soit le résultat
Q.allSettled([stepA(), stepB()])
  .then((results) => {
    results.forEach((r) => {
      if (r.state === 'fulfilled') console.log(r.value);
      else console.error(r.reason);
    });
  });

Références

Sujets associés