Szybka pomoc

Ściąga z biblioteki obietnic Bluebird.js

Krótki przewodnik po Bluebird.js: spreads, przechwytywanie błędów, Promise.join, Promise.all, Promise.props, promisify i korutyny.

· Opublikowano

Bluebird Bluebird to wysoce wydajna, bogata w funkcje biblioteka obietnic (Promises) dla JavaScript i Node.js.

Przegląd łańcuchów metod

promise
  .then(okFn, errFn)
  .spread(okFn, errFn)        // * Rozpakowuje tablicę do argumentów funkcji
  .catch(errFn)
  .catch(TypeError, errFn)    // * Filtrowane przechwytywanie błędów
  .finally(fn)
  .map(function (e) { /* ... */ })  // * Współbieżna iteracja
  .each(function (e) { /* ... */ }) // * Sekwencyjna iteracja

Metody oznaczone gwiazdką * to specyficzne rozszerzenia Bluebird wykraczające poza standard ES6.


Wiele argumentów i rozpakowywanie (Promise.spread)

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

Zobacz: Dokumentacja Promise.spread: Promise.spread


Łączenie niezależnych obietnic (Promise.join)

Koordynuje wiele niezależnych obietnic ze stałą sygnaturą wywołania:

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

Zobacz: Dokumentacja Promise.join: Promise.join


Metody kolekcji tablicowych

  • Promise.all([p]): Rozwiązuje się, gdy wszystkie obietnice zakończą się sukcesem, lub odrzuca przy pierwszym błędzie.
  • Promise.some([p], count): Rozwiązuje się, gdy określona liczba obietnic zakończy się pomyślnie.
  • Promise.any([p]): Rozwiązuje się, gdy którakolwiek pojedyncza obietnica zakończy się pomyślnie.
  • Promise.map(array, fn, { concurrency: 5 }): Mapuje elementy z kontrolowaną współbieżnością.
Promise.map(urls, url => fetch(url), { concurrency: 3 })
  .then(responses => {
    // Przetwarzanie odpowiedzi z limitem 3 jednoczesnych żądań
  });

Obietnice obiektów (Promise.props)

Rozwiązuje obiekt zawierający obietnice do obiektu z rozwiązanymi wartościami:

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

Promisification (Konwersja funkcji callback)

Konwersja tradycyjnych funkcji zwrotnych (callbacks) Node.js na obietnice:

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

// Promisify pojedynczej funkcji
const readFile = Promise.promisify(fs.readFile);

// Promisify całego modułu
Promise.promisifyAll(fs);
// Teraz metoda fs.readFileAsync jest natychmiast dostępna

Korutyny (Generatory)

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

Powiązane tematy