Upload
nicolas-quiceno-benavides
View
164
Download
1
Embed Size (px)
Citation preview
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)