hablemos de promesas

Post on 15-Apr-2017

158 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Hablemos de promesas

Non-blocking I/O

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

});

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

});

});

});

Non-blocking I/O

callback hell

Promise A+ ESTANDAR

Promise

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

Promise

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

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

reject(/*...*/);

});

PromiseEl estado de una promesa puede ser:

1.pending

2.fulfilled

3.rejected

PromiseEl estado de una promesa puede ser:

1.pending

2.fulfilled

3.rejected

Los métodos para cambiar de estado:

1.resolve

2.reject

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

PromiseHELLO PROMISE

ThenEste método recibe dos parámetros:

1.onFulfilled

2.onRejected

ThenEste método recibe dos parámetros:

1.onFulfilled

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

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

});

ThenPROMISE AND THEN

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

Always asynchronousTHEN IS

ASYNCHRONOUS

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

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

}

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

}

Concat thenEl callback onFulfilled puede devolver:

1.Un valor

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

});

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

});

Concat thenPAY A VALUE y PAY A PROMISE

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

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

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

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

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

});

Catch errorsCATCH

ERRORS

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)

top related