Bluebird Το Bluebird είναι μια βιβλιοθήκη Promise υψηλής απόδοσης για JavaScript και Node.js.
Επισκόπηση αλυσιδωτών κλήσεων (Method Chaining)
promise
.then(okFn, errFn)
.spread(okFn, errFn) // * Αποσυσκευασία πίνακα σε ορίσματα
.catch(errFn)
.catch(TypeError, errFn) // * Φιλτραρισμένη σύλληψη σφάλματος
.finally(fn)
.map(function (e) { /* ... */ }) // * Ταυτόχρονη επανάληψη
.each(function (e) { /* ... */ }) // * Διαδοχική επανάληψη
Οι μέθοδοι με * είναι επεκτάσεις του Bluebird πέρα από το πρότυπο ES6 Promise.
Πολλαπλά ορίσματα & Spreading
Promise.resolve(['foo', 'bar'])
.spread((item1, item2) => {
console.log(item1, item2); // 'foo', 'bar'
});
Δείτε: Τεκμηρίωση Promise.spread: Promise.spread
Συνδυασμός ανεξάρτητων Promises (Promise.join)
Συντονίζει πολλαπλά ανεξάρτητα promises:
Promise.join(
getPictures(),
getMessages(),
getTweets(),
(pics, msgs, tweets) => {
return { pics, msgs, tweets };
}
);
Δείτε: Τεκμηρίωση Promise.join: Promise.join
Μέθοδοι συλλογής πινάκων
Promise.all([p]): Επιλύεται όταν ολοκληρωθούν όλα τα promises ή απορρίπτεται στο πρώτο σφάλμα.Promise.some([p], count): Επιλύεται όταν επιλυθεί συγκεκριμένος αριθμός promises.Promise.any([p]): Επιλύεται μόλις ολοκληρωθεί οποιοδήποτε μεμονωμένο promise.Promise.map(array, fn, { concurrency: 5 }): Επεξεργασία στοιχείων με ελεγχόμενο συγχρονισμό.
Promise.map(urls, url => fetch(url), { concurrency: 3 })
.then(responses => {
// Επεξεργασία με μέγιστο 3 ταυτόχρονα αιτήματα
});
Promises αντικειμένων (Promise.props)
Επιλύει ένα αντικείμενο που περιέχει promises σε αντικείμενο με τις επιλυμένες τιμές:
Promise.props({
photos: getPhotos(),
posts: getPosts()
}).then(result => {
console.log(result.photos, result.posts);
});
Promisification (Μετατροπή callbacks)
Μετατροπή κλασικών συναρτήσεων callback του Node.js σε promises:
const fs = require('fs');
const Promise = require('bluebird');
// Promisify μεμονωμένης συνάρτησης
const readFile = Promise.promisify(fs.readFile);
// Promisify ολόκληρου module
Promise.promisifyAll(fs);
// Η fs.readFileAsync είναι πλέον διαθέσιμη
Coroutines (Γεννήτριες)
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;
});