API přes Promise A+ a progress uploadu (nejen Javascript) rubrika: Programování: JavaScript

8 Občan
položil/-a 26.5.2015

Asi není potřeba rozepisovat použití Promise pro volání API. Kousky kódu budu psát z pohledu volání API, snad to bude přehlednější, než rozepisovat implementaci těl. Zápis je v Javascriptu, ale inspirace z jiného světa je vždy vítána.

request.get('/an-endpoint')
  .then(function(res) {
    console.log(res);
  });

Ovšem pokud je potřeba zpracovávat progress uploadu, tak už se to neslučuje se sématikou Promise.
Existuje deprecated API u poloviny knihoven na Promise, ale to nepoužívám.

request.get('/an-endpoint')
  .progress(function(progress) {
    console.log(progress);
  })
  .then(function(res) {
    console.log(res);
  });

Potkávám na řešení přes kočkopsa Promise + Eventy:

request.get('/an-endpoint')
  .on('progress', function(progress) {
    console.log(progress);
  })
  .then(function(res) {
    console.log(res);
  });

Osobně používám továrnu na Promise, která drží ve scope callback "progress", který přidávám, jako parametr:

requestFactory.get('/an-endpoint', progressCallback)
  .then(function(res) {
    console.log(res);
  });
  //progressCallback se volá na různých místech v těle Promise resp. deferred

Ani jedno řešení není čistý, zatím mě napadlo vše přepsat pomocí reaktivního programování místo Promise.

Ja takovou věc řešíte vy?

odkaz Vyřešeno
9 Augi
odpověděl/-a 26.5.2015

Promises/Futures řeší asynchronní zpracování jediné hodnoty a ty jich máš více, takže je to podle mě jasný kandidát na reaktivní přístup (jak sám píšeš). V JS bohužel aktivně nedělám (Scala), ale Rx.JS vypadají od pohledu jako jasná volba.

Komentáře

  • Občan : Pohledy ze světa Scaly či F#, Hask, Clojure jsou dobré pro JS. Architekturu se snažím sledovat právě z těchto světů. Tyhle API promise mě aktualizují Repository, na který reaktivně reaguje, část co uživatel vidí. Tak proč nemít i API vrstvu reativní, místo nějakých mutantů. Proto dávám vyřešeno. 27.5.2015

Pro zobrazení všech 2 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.