Ígéretek JavaScriptben

nicole.pierce.photography ♥ - http://www.flickr.com/photos/nicopierce/

Presenter Notes

CommonJS Promises

  • Különböző változatok
  • Egymáshoz közelítő API
  • Egy függvény, ami egy ígéret objektumot ad vissza

Presenter Notes

CommonJS Promises

Ape Lad - http://www.flickr.com/photos/apelad/

Presenter Notes

Promises/A

  • A Promise függvény által visszaadott ígéretnek egy metódusa van, a then
  • a then akkor hívódik meg, amikor az ígéret teljesült / meghiúsult.
  • 3 callback függvény paraméter (mind opcionális):
    • teljesült (onFulfilled)
    • hiba történt (onError)
    • előrehaladás (onProgress - nem kötelező implementálni, többször is lefuthat)
  • a then metódusnak is egy ígéretet kell visszaadnia, ami a teljesülés, illetve meghiúsulás esetén fog teljesülni / meghiúsulni
  • interaktív változat:
    • get - visszaadja a ígéret célpontjának egy tulajdonságát
    • call - meghívja az ígéret célpontjának egy metódusát

Presenter Notes

Promises/A példaimplementáció

 1 function noop() {}
 2 function PromisesA() {
 3 }
 4 PromisesA.prototype = {
 5   then: function (onFulfilled, onError, onProgress) {
 6     if (onFulfilled) this._onFulfilled = onFulfilled;
 7     if (onError) this._onError = onError;
 8     if (progress) this._onProgress = onProgress;
 9     if (this._isDone) this._onFulfilled();
10     return new PromisesA();
11   },
12   get: noop,
13   call: noop,
14   _isDone: false,
15   _onFulfilled: noop,
16   _onError: noop,
17   _onProgress: noop,
18 };

Presenter Notes

Promises/A demo

1 demo(1000, 10).then(
2   console.log.bind(console),
3   null,
4   console.log.bind(console)
5 );

Presenter Notes

Promises/A+

Eltérések a Promises/A-hoz képest:

  • A then-nek nem kötelező új ígéretet visszaadni
  • A then-nek csak két paramétere van: onFulfilled és onError
  • Az onError-nak egy kivételt kell, hogy kapjon paraméterül, amennyiben kivétel történt.
  • Nincs interaktív változat
  • onFulfilled és onError közül csak az egyik és pontosan egyszer hívódhat meg, aszinkron módon
  • Több then hívása esetén az onFulfilled vagy onError függvények a hozzáadásuk sorrendjében futnak le.

Presenter Notes

Promises/A+ demo

1 var promise = demo(1000);
2 promise.then(console.log.bind(console, 'All'));
3 promise.then(console.log.bind(console, 'Everything'));
4 
5 demo(3000).then(log).then(log);

Presenter Notes

Promises/B

  • when(value, callback, errback_opt)
  • asap(value, callback, errback_opt) - akár azonnal visszatérő when
  • get(object, name) - tulajdonság lekérdezése
  • post(object, name, args) - metódus lefuttatása
  • put(object, name, value) - tulajdonság beállítása
  • del(object, name) - tulajdonság törlése
  • makePromise(descriptor, fallback) - Promise generátor
  • defer() - Promise kezelő objektum (resolve(), reject(), promise)
  • isPromise()

Presenter Notes

Implementációk

drubuntu - http://www.flickr.com/photos/drewbandy/

Presenter Notes

Implementációk

  • Q - https://github.com/kriskowal/q
  • jQuery - Deferred - http://api.jquery.com/jQuery.Deferred/
  • dojo - promise - http://dojotoolkit.org/reference-guide/1.8/dojo/promise.html
  • when.js - https://github.com/cujojs/when
  • FuturesJS - https://github.com/coolaj86/futures
  • RSVP.js - https://github.com/tildeio/rsvp.js

Presenter Notes