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