Bluebird Bluebird är ett högpresterande Promise-bibliotek med avancerade funktioner för JavaScript och Node.js.
Översikt över metodkedjor
promise
.then(okFn, errFn)
.spread(okFn, errFn) // * Packar upp array till funktionsargument
.catch(errFn)
.catch(TypeError, errFn) // * Filtrerad felhantering per feltyp
.finally(fn)
.map(function (e) { /* ... */ }) // * Samtidig iteration med begränsning
.each(function (e) { /* ... */ }) // * Sekventiell iteration i turordning
Metoder märkta med * är Bluebird-specifika tillägg utöver standarden för ES6-promises.
Flera argument och uppackning (Promise.spread)
Promise.resolve(['foo', 'bar'])
.spread((item1, item2) => {
console.log(item1, item2); // 'foo', 'bar'
});
Se: Dokumentation för Promise.spread: Promise.spread
Kombinera oberoende promises (Promise.join)
Samordnar flera oberoende promises med fast signatur:
Promise.join(
getPictures(),
getMessages(),
getTweets(),
(pics, msgs, tweets) => {
return { pics, msgs, tweets };
}
);
Se: Dokumentation för Promise.join: Promise.join
Metoder för arraysamlingar
Promise.all([p]): Uppfylls när alla promises lyckas, eller avvisas direkt vid första felet.Promise.some([p], count): Uppfylls när ett angivet antal promises har slutförts framgångsrikt.Promise.any([p]): Uppfylls så snart något enskilt promise lyckas.Promise.map(array, fn, { concurrency: 5 }): Mappar element med kontrollerad samtidighet.
Promise.map(urls, url => fetch(url), { concurrency: 3 })
.then(responses => {
// Bearbeta svar med högst 3 samtidiga anrop
});
Objektpromises (Promise.props)
Löser ett objekt som innehåller promises till ett objekt med färdiga värden:
Promise.props({
photos: getPhotos(),
posts: getPosts()
}).then(result => {
console.log(result.photos, result.posts);
});
Promisifiering (Konvertera callbacks)
Konvertera traditionella callback-funktioner i Node.js till moderna promises:
const fs = require('fs');
const Promise = require('bluebird');
// Promisifiera en enskild funktion
const readFile = Promise.promisify(fs.readFile);
// Promisifiera en hel modul på en gång
Promise.promisifyAll(fs);
// Nu är metoden fs.readFileAsync direkt tillgänglig
Coroutines (Generatorer)
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;
});