Γρήγορη αναφορά

Bluebird.js Βιβλιοθήκη Promise Cheat Sheet

Συνοπτικός οδηγός για το Bluebird.js: spreads, διαχείριση σφαλμάτων, Promise.join, Promise.all, Promise.props, promisification και coroutines.

· Δημοσιεύτηκε

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

Σχετικά θέματα