Riferimento rapido

Cheat Sheet della libreria di promise Bluebird.js

Guida rapida per Bluebird.js: spreads, gestione errori, Promise.join, Promise.all, Promise.props, promisification e coroutine.

· Pubblicato

Bluebird Bluebird è una libreria di promise ad alte prestazioni e ricca di funzionalità avanzate per JavaScript e Node.js.

Panoramica sul concatenamento dei metodi

promise
  .then(okFn, errFn)
  .spread(okFn, errFn)        // * Estrae gli elementi dell'array come argomenti
  .catch(errFn)
  .catch(TypeError, errFn)    // * Catch filtrato per tipo di errore
  .finally(fn)
  .map(function (e) { /* ... */ })  // * Iterazione concorrente
  .each(function (e) { /* ... */ }) // * Iterazione sequenziale

I metodi contrassegnati con * sono estensioni specifiche di Bluebird rispetto allo standard ES6.


Argomenti multipli e spreading

Promise.resolve(['foo', 'bar'])
  .spread((item1, item2) => {
    console.log(item1, item2); // 'foo', 'bar'
  });

Vedi: Documentazione di Promise.spread: Promise.spread


Combinare promise fisse (Promise.join)

Coordina più promise indipendenti con una firma fissa:

Promise.join(
  getPictures(),
  getMessages(),
  getTweets(),
  (pics, msgs, tweets) => {
    return { pics, msgs, tweets };
  }
);

Vedi: Documentazione di Promise.join: Promise.join


Metodi per collezioni di array

  • Promise.all([p]): Si risolve quando tutte le promise hanno successo, o rifiuta al primo errore.
  • Promise.some([p], count): Si risolve quando il numero indicato di promise ha successo.
  • Promise.any([p]): Si risolve non appena una qualsiasi singola promise ha successo.
  • Promise.map(array, fn, { concurrency: 5 }): Mappa gli elementi con livello di concorrenza controllato.
Promise.map(urls, url => fetch(url), { concurrency: 3 })
  .then(responses => {
    // Elabora risposte con massimo 3 richieste contemporanee
  });

Promise di oggetti (Promise.props)

Risolve un oggetto contenente promise in un oggetto con le proprietà risolte:

Promise.props({
  photos: getPhotos(),
  posts: getPosts()
}).then(result => {
  console.log(result.photos, result.posts);
});

Promisification (Da callback a promise)

Converte le consuete funzioni callback di Node.js in moderne promise:

const fs = require('fs');
const Promise = require('bluebird');

// Promisify di una singola funzione
const readFile = Promise.promisify(fs.readFile);

// Promisify di un intero modulo
Promise.promisifyAll(fs);
// Ora fs.readFileAsync è subito disponibile

Coroutine (Generatori)

const loginUser = Promise.coroutine(function* (email, password) {
  const user = yield User.findOne({ email }).exec();
  const valid = yield user.comparePassword(password);
  if (!valid) throw new Error('Invalid credentials');
  return user;
});

Argomenti correlati