Snelle referentie

Bluebird.js Promise-bibliotheek Spiekbrief

Beknopte handleiding voor Bluebird.js: spreads, foutopvangers, Promise.join, Promise.all, Promise.props, promisification en coroutines.

· Gepubliceerd

Bluebird Bluebird is een krachtige promise-bibliotheek boordevol functies voor JavaScript en Node.js.

Overzicht van methodenketens

promise
  .then(okFn, errFn)
  .spread(okFn, errFn)        // * Pakt array uit in afzonderlijke argumenten
  .catch(errFn)
  .catch(TypeError, errFn)    // * Gefilterde foutafhandeling op fouttype
  .finally(fn)
  .map(function (e) { /* ... */ })  // * Gelijktijdig itereren
  .each(function (e) { /* ... */ }) // * Sequentieel itereren

Methoden gemarkeerd met * zijn Bluebird-specifieke uitbreidingen buiten de standaard ES6 Promise-specificatie.


Meerdere argumenten & uitpakken (Promise.spread)

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

Zie: Promise.spread-documentatie: Promise.spread


Onafhankelijke promises combineren (Promise.join)

Coördineert meerdere onafhankelijke promises met een vaste signatuur:

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

Zie: Promise.join-documentatie: Promise.join


Array-collectiemethoden

  • Promise.all([p]): Wordt opgelost wanneer alle promises slagen, of wijst direct af bij de eerste fout.
  • Promise.some([p], count): Wordt opgelost zodra een specifiek aantal promises slaagt.
  • Promise.any([p]): Wordt opgelost zodra een willekeurige individuele promise slaagt.
  • Promise.map(array, fn, { concurrency: 5 }): Mapt elementen met gecontroleerde gelijktijdigheid.
Promise.map(urls, url => fetch(url), { concurrency: 3 })
  .then(responses => {
    // Antwoorden verwerken met maximaal 3 gelijktijdige verzoeken
  });

Object-promises (Promise.props)

Lost een object met promise-waarden op naar een object met opgeloste eigenschappen:

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

Promisification (Callbacks omzetten)

Converteer traditionele Node.js callback-functies naar moderne promises:

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

// Eén functie promisificeren
const readFile = Promise.promisify(fs.readFile);

// Een complete module promisificeren
Promise.promisifyAll(fs);
// Nu is fs.readFileAsync direct beschikbaar

Coroutines (Generators)

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

Verwante onderwerpen