Promises

Promises

Návrhový vzor pro CPS

Ondřej Žára, Seznam.cz

Bojový plán

  1. Problémy asynchronních funkcí
  2. Promise: zobecněný callback
  3. Pokročilé partie

Problémy asynchronních funkcí

Problémy asynchronních funkcí

var output = computeStuff(input);

var output = requestStuff(input, callback);

Problémy asynchronních funkcí

Promise: zobecněný callback

Starý dobrý callback

Promise: zobecněný callback

Promise: základní použití

var requestData = function() {
	var promise = new JAK.Promise();
	
	/* var xhr = ... */
	
	xhr.addEventListener("ready", function(data) { 
		promise.fulfill(data); 
	});
	
	/* xhr.send() */
	
	return promise;
}

Promise: základní použití

var promise = requestData();

promise.then(callback);
promise.then(jinyCallback);

Promise: opáčko

Promise: návratová hodnota then

Promise: návratová hodnota then

var promise = requestData1();

promise.then(requestData2).then(requestData3).then(...);

/* requestData{1..3} vrací promise. 
   Kdyby náhodou třeba requestData2 vrátila rovnou výsledek,
     nic by se nerozbilo (ale requestData3 by bylo voláno ihned).
*/

Pokročilé partie

Pokročilé partie: pořadí volání

Pokročilé partie: reject

Pokročilé partie: reject

var request = function() {
	var promise = new JAK.Promise();
	xhr.onreadystatechange = function() {
		if (xhr.status == 200) { promise.fulfill(); } else { promise.reject(); }
	}
	return promise;
}

var promise = request();
promise.then(zpracujData, vypisChybu);

Pokročilé partie: when

Rekapitulace

Rekapitulace

Prostor pro otázky
Ondřej Žára, Webmaster, ondrej.zara@firma.seznam.cz