SlideShare a Scribd company logo
1 of 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)

More Related Content

What's hot (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++
 

Similar to Promesas JS: control de flujo asíncrono

Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSJavier Abadía
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es VietnamAlex Casquete
 
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 2xjordi
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funcioneseulo10
 
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 A2climancc
 
LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.LABORATORIO DE PROGRAMACIÓN I.
LABORATORIO DE PROGRAMACIÓN I.SILVA19_PAMELA
 
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 JavaScriptRicardo Pallás Román
 
Introducción a Javascript
Introducción a JavascriptIntroducción a Javascript
Introducción a JavascriptAbe Estrada
 
Javascript funcional
Javascript funcionalJavascript funcional
Javascript funcionalLeonardo Soto
 
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.11Miguel Angel
 
Sockets en c
Sockets en cSockets en c
Sockets en cMaShYy
 

Similar to Promesas JS: control de flujo asíncrono (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
 

Recently uploaded

Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++luzgaray6
 
Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Leonardo J. Caballero G.
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Leonardo J. Caballero G.
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.CeteliInmaculada
 

Recently uploaded (6)

Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++Semana 5-Conceptualización del lenguaje de programación C++
Semana 5-Conceptualización del lenguaje de programación C++
 
Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024Introducción a Plone CMS - World Plone Day 2024
Introducción a Plone CMS - World Plone Day 2024
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024Theme design in Plone 6 - World Plone Day 2024
Theme design in Plone 6 - World Plone Day 2024
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
Presentación de html, css y javascript.
Presentación  de html, css y javascript.Presentación  de html, css y javascript.
Presentación de html, css y javascript.
 

Promesas JS: control de flujo asíncrono

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