SlideShare une entreprise Scribd logo
1  sur  31
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(/*...*/);
});
Promise
El estado de una promesa puede ser:
1.pending
2.fulfilled
3.rejected
Promise
El estado de una promesa puede ser:
1.pending
2.fulfilled
3.rejected
Los métodos para cambiar de estado:
1.resolve
2.reject
Promise
El 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
Promise
HELLO PROMISE
Then
Este método recibe dos parámetros:
1.onFulfilled
2.onRejected
Then
Este método recibe dos parámetros:
1.onFulfilled
2.onRejected promise.then(function(result){
/*... action onFullfilled*/
}, function(reason){
/*... catch error onRejected*/
});
Then
PROMISE AND THEN
Always asynchronous
Importante 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 asynchronous
THEN IS ASYNCHRONOUS
Concat then
La 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 then
La 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 then
La 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 then
El callback onFulfilled puede devolver:
1.Un valor
promise.then(function(result1){
return 5;
}).then(function(result2){
//...result2 = 5
});
Concat then
El 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 then
PAY A VALUE y PAY A PROMISE
Catch errors
El callback onRejected se ejecuta en caso de producirse una excepción o
cuando la promesa pasa a rejected.
Catch errors
El 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 errors
Cuidado !!
function errorHandler(reason){
// ...
}
function successHandler(value){
// ...
throw new Error("NO CATCH");
}
new Promise(function(resolve, reject){
// resolve o reject promise
}).then(successHandler, errorHandler);
Catch errors
Cuidado !!
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 errors
Siempre 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 errors
CATCH ERRORS
Mas info.
Estándar A+
Página de información general sobre promesas
Articulo para entender como funcionan las promesas por dentro
Librería rsvp
Diseño de la librería q
NodeSchool Workshopper - Promise It Won't Hurt (más que
recomendable)

Contenu connexe

Tendances

Ejercicios propuestos 4
Ejercicios propuestos 4Ejercicios propuestos 4
Ejercicios propuestos 4
YO Por Que
 
Indentificacion de funciones
Indentificacion de funcionesIndentificacion de funciones
Indentificacion de funciones
Julian Bohorquez
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
jubacalo
 
Deteccion de Ciclos en c
Deteccion de Ciclos en cDeteccion de Ciclos en c
Deteccion de Ciclos en c
Abraham
 

Tendances (18)

Prueba de escritorio Métodos
Prueba de escritorio MétodosPrueba de escritorio Métodos
Prueba de escritorio Métodos
 
Ejemplos java
Ejemplos javaEjemplos java
Ejemplos java
 
Ejercicios propuestos 4
Ejercicios propuestos 4Ejercicios propuestos 4
Ejercicios propuestos 4
 
Practica de visual basic sistema de facturación
Practica de visual basic sistema de facturaciónPractica de visual basic sistema de facturación
Practica de visual basic sistema de facturación
 
Indentificacion de funciones
Indentificacion de funcionesIndentificacion de funciones
Indentificacion de funciones
 
Conexion Visual
Conexion Visual Conexion Visual
Conexion Visual
 
Sql
SqlSql
Sql
 
Node al limite con Nest
Node al limite con NestNode al limite con Nest
Node al limite con Nest
 
Statement
StatementStatement
Statement
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Pruebas de escritorio con objetos
Pruebas de escritorio con objetosPruebas de escritorio con objetos
Pruebas de escritorio con objetos
 
Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.Java Applet:::Pelota que rebota en un recinto.
Java Applet:::Pelota que rebota en un recinto.
 
Funciones Clase1
Funciones Clase1Funciones Clase1
Funciones Clase1
 
Deteccion de Ciclos en c
Deteccion de Ciclos en cDeteccion de Ciclos en c
Deteccion de Ciclos en c
 
Volley vs Retrofit
Volley vs RetrofitVolley vs Retrofit
Volley vs Retrofit
 
Evaluación prog iii try catch
Evaluación prog iii try catchEvaluación prog iii try catch
Evaluación prog iii try catch
 
Triggers
TriggersTriggers
Triggers
 
JUEGO CONCENTRECE PARA ENTORNO DEV C++
JUEGO CONCENTRECE PARA ENTORNO DEV C++JUEGO CONCENTRECE PARA ENTORNO DEV C++
JUEGO CONCENTRECE PARA ENTORNO DEV C++
 

Similaire à Hablemos de promesas

Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
eulo10
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
climancc
 
Introducción a Javascript
Introducción a JavascriptIntroducción a Javascript
Introducción a Javascript
Abe Estrada
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcional
Leonardo Soto
 
Sockets en c
Sockets en cSockets en c
Sockets en c
MaShYy
 

Similaire à Hablemos de promesas (20)

Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
ECMAScript 6
ECMAScript 6ECMAScript 6
ECMAScript 6
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
Perl3 subrutinas
Perl3 subrutinasPerl3 subrutinas
Perl3 subrutinas
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 
diapo1.pdf
diapo1.pdfdiapo1.pdf
diapo1.pdf
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.
 
OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.OBJETO SQLCOMMAND.
OBJETO SQLCOMMAND.
 
Curso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzadosCurso AngularJS - 7. temas avanzados
Curso AngularJS - 7. temas avanzados
 
Charla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptCharla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScript
 
Introducción a Javascript
Introducción a JavascriptIntroducción a Javascript
Introducción a Javascript
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcional
 
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11CONECTAR  C# CON POSTGRESQL  USANDO NPGSQL 2.0.11
CONECTAR C# CON POSTGRESQL USANDO NPGSQL 2.0.11
 
Sockets en c
Sockets en cSockets en c
Sockets en c
 
Patrones utiles para solid
Patrones utiles para solidPatrones utiles para solid
Patrones utiles para solid
 
Funciones
FuncionesFunciones
Funciones
 

Dernier

2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
EncomiendasElSherpa
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
GuillermoBarquero7
 

Dernier (6)

Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
 
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOSESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
 
Trabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - OfimáticaTrabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - Ofimática
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
 
Caso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business CentralCaso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business Central
 

Hablemos de promesas

  • 3. 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); });
  • 4. 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 }); }); });
  • 7. Promise Promesa = Objeto que representa el estado de una operación asíncrona
  • 8. Promise Promesa = Objeto que representa el estado de una operación asíncrona new Promise(function(resolve, reject){ resolve(/*...*/); reject(/*...*/); });
  • 9. Promise El estado de una promesa puede ser: 1.pending 2.fulfilled 3.rejected
  • 10. Promise El estado de una promesa puede ser: 1.pending 2.fulfilled 3.rejected Los métodos para cambiar de estado: 1.resolve 2.reject
  • 11. Promise El 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
  • 13. Then Este método recibe dos parámetros: 1.onFulfilled 2.onRejected
  • 14. Then Este método recibe dos parámetros: 1.onFulfilled 2.onRejected promise.then(function(result){ /*... action onFullfilled*/ }, function(reason){ /*... catch error onRejected*/ });
  • 16. Always asynchronous Importante 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");
  • 18. Concat then La concatenación de las llamadas a then añade cada uno de los callback a una cola que se va llamando en orden secuencial
  • 19. Concat then La 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 }
  • 20. Concat then La 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 }
  • 21. Concat then El callback onFulfilled puede devolver: 1.Un valor promise.then(function(result1){ return 5; }).then(function(result2){ //...result2 = 5 });
  • 22. Concat then El 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 });
  • 23. Concat then PAY A VALUE y PAY A PROMISE
  • 24. Catch errors El callback onRejected se ejecuta en caso de producirse una excepción o cuando la promesa pasa a rejected.
  • 25. Catch errors El 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 })
  • 26. Catch errors Cuidado !! function errorHandler(reason){ // ... } function successHandler(value){ // ... throw new Error("NO CATCH"); } new Promise(function(resolve, reject){ // resolve o reject promise }).then(successHandler, errorHandler);
  • 27. Catch errors Cuidado !! 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");
  • 28. Catch errors Siempre 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); });
  • 30.
  • 31. Mas info. Estándar A+ Página de información general sobre promesas Articulo para entender como funcionan las promesas por dentro Librería rsvp Diseño de la librería q NodeSchool Workshopper - Promise It Won't Hurt (más que recomendable)