hablemos de promesas

31
Hablemos de promesas

Upload: nicolas-quiceno-benavides

Post on 15-Apr-2017

158 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Hablemos de promesas

Hablemos de promesas

Page 2: Hablemos de promesas

Non-blocking I/O

Page 3: Hablemos de promesas

Non-blocking I/O

(1)

(2)

(1) Ejecuto la función $ajaxRequest, registro el cb

(2) Sigo la ejecucion del stack

(3) Respuesta de la petición, añado a la cola el msg asociado al cb

(3)

$ajaxRequest.get({

url: 'https://www.example-api.com'}, function () { console.log.apply(console, arguments);

});

Page 4: Hablemos de promesas

Non-blocking I/O$ajaxRequest.get({

url: 'https://www.example-api.com/0'}, function(err, firstRes){ //... process first response

$ajaxRequest.get({

url: 'https://www.example-api.com/1' }, function(err, SecondRes){ //... process second response

$ajaxRequest.get({

url: 'https://www.example-api.com/2' }, function(err, LastRes){ //... process last response

});

});

});

Page 5: Hablemos de promesas

Non-blocking I/O

callback hell

Page 6: Hablemos de promesas

Promise A+ ESTANDAR

Page 7: Hablemos de promesas

Promise

Promesa = Objeto que representa el estado de una operación asíncrona

Page 8: Hablemos de promesas

Promise

Promesa = Objeto que representa el estado de una operación asíncrona

new Promise(function(resolve, reject){ resolve(/*...*/);

reject(/*...*/);

});

Page 9: Hablemos de promesas

PromiseEl estado de una promesa puede ser:

1.pending

2.fulfilled

3.rejected

Page 10: Hablemos de promesas

PromiseEl estado de una promesa puede ser:

1.pending

2.fulfilled

3.rejected

Los métodos para cambiar de estado:

1.resolve

2.reject

Page 11: Hablemos de promesas

PromiseEl estado de una promesa puede ser:

1.pending

2.fulfilled

3.rejected

Los métodos para cambiar de estado:

1.resolve

2.reject

Importante!! una vez fulfilled o rejected, el estado pasa a ser inmutable

Page 12: Hablemos de promesas

PromiseHELLO PROMISE

Page 13: Hablemos de promesas

ThenEste método recibe dos parámetros:

1.onFulfilled

2.onRejected

Page 14: Hablemos de promesas

ThenEste método recibe dos parámetros:

1.onFulfilled

2.onRejected promise.then(function(result){ /*... action onFullfilled*/

}, function(reason){ /*... catch error onRejected*/

});

Page 15: Hablemos de promesas

ThenPROMISE AND THEN

Page 16: Hablemos de promesas

Always asynchronousImportante entender que then siempre es asíncrono

var promise = new Promise(function(resolve, reject){ resolve("FIRST");

});

promise.then(function(result){ console.log(result);

});

console.log("SECOND");

Page 17: Hablemos de promesas

Always asynchronousTHEN IS

ASYNCHRONOUS

Page 18: Hablemos de promesas

Concat thenLa concatenación de las llamadas a then añade cada uno de los callback a una cola que se va llamando en orden secuencial

Page 19: Hablemos de promesas

Concat thenLa concatenación de las llamadas a then añade cada uno de los callback a una cola que se va llamando en orden secuencial

function firstThen(response){ //... first fulfillment handler in queue

}

function secondThen(valueFirst){ //... second fulfillment handler in queue

}

Page 20: Hablemos de promesas

Concat thenLa concatenación de las llamadas a then añade cada uno de los callback a una cola que se va llamando en orden secuencial

new Promise(function(resolve, reject){ resolve("FIRST");

}).then(firstThen)

.then(secondThen);

function firstThen(response){ //... first fulfillment handler in queue

}

function secondThen(valueFirst){ //... second fulfillment handler in queue

}

Page 21: Hablemos de promesas

Concat thenEl callback onFulfilled puede devolver:

1.Un valor

promise.then(function(result1){ return 5;}).then(function(result2){ //...result2 = 5

});

Page 22: Hablemos de promesas

Concat thenEl callback onFulfilled puede devolver:

1.Un valor

2.Una promesa

promise.then(function(result1){ return 5;}).then(function(result2){ //...result2 = 5

});

promise.then(function(result1){ return new Promise(function(resolve, reject){ resolve(10);

});

}).then(function(result2){ //...result2 = 10

});

Page 23: Hablemos de promesas

Concat thenPAY A VALUE y PAY A PROMISE

Page 24: Hablemos de promesas

Catch errorsEl callback onRejected se ejecuta en caso de producirse una excepción o cuando la promesa pasa a rejected.

Page 25: Hablemos de promesas

Catch errorsEl callback onRejected se ejecuta en caso de producirse una excepción o cuando la promesa pasa a rejected.

new Promise(function(resolve, reject){ resolve("FIRST");

}).then(function(result){ throw new Error("NO CATCH");}).then(null, function(err){ console.log(err);//...err = NO CATCH

});

new Promise(function(resolve, reject){ reject("FIRST");

}).then(null, function(err){ console.error(err);//...err = NO CATCH})

Page 26: Hablemos de promesas

Catch errorsCuidado !!

function errorHandler(reason){ // ...

}

function successHandler(value){ // ...

throw new Error("NO CATCH");}

new Promise(function(resolve, reject){ // resolve o reject promise

}).then(successHandler, errorHandler);

Page 27: Hablemos de promesas

Catch errorsCuidado !!

function errorHandler(reason){ // ...

}

function successHandler(value){ // ...

throw new Error("NO CATCH");}

new Promise(function(resolve, reject){ // resolve o reject promise

}).then(successHandler, errorHandler);

Nadie captura new Error("NO CATCH");

Page 28: Hablemos de promesas

Catch errorsSiempre capturamos al final!!

new Promise(function(resolve, reject){ // resolve o reject promise

}).then(function(response){ //... process first response

return new Promise(function(resolve, reject){/* resolve */});}).then(function(response){ //... process second response

}).then(null, function(err){ console.error(err);

});

Page 29: Hablemos de promesas

Catch errorsCATCH

ERRORS

Page 30: Hablemos de promesas
Page 31: Hablemos de promesas

Mas info.

Estándar A+Página de información general sobre promesasArticulo para entender como funcionan las promesas por dentroLibrería rsvpDiseño de la librería qNodeSchool Workshopper - Promise It Won't Hurt (más que

recomendable)