{ "by": "@joelalejandro",
"project": "CbaJS 1.0",
"date": new Date(2013, 9, 18) }
En sentido general: Es la expresión de la voluntad de dar a alguien o hacer por él algo. Es un augurio, indicio o señal que hace esperar algún bien.
Fuente: Diccionario de la Real Academia Española
En sentido de Derecho: Es un contrato por el cual una de las partes, o ambas, se obligan, dentro de cierto lapso, sea por el vencimiento de un plazo o por el cumplimiento de una condición, a celebrar un contrato futuro determinado.
Fuente: Diccionario de la Real Academia Española
En Ciencias de la Computación: Es un objeto que actúa como preliminar al resultado del cálculo aún en ejecución.
Fuente: Wikipedia
En JavaScript: Es una implementación de un patrón de diseño para controlar llamadas (a)sincrónicas.
$.get("/mis/cosas", {
success: function(...) {
/* terminé! */
},
error: function(...) {
/* salió todo mal :( */
}
});
Un closure anónimo dentro de $.get
,
que se ejecuta al terminarse la petición HTTP.
$.get("/mis/cosas").done(function(data) {
/* terminé! :D */
}).fail(function() {
/* salió todo mal :( */
});
Como el objeto retornado por $.get
es una extensión de Deferred (el equivalente de Promise en jQuery), es posible encadenar acciones al "contrato".
$.get("/mis/cosas").done([
function(d){ /* terminé! :D */ },
function(d){ /* terminé! :D :D */ },
function(d){ /* terminé! :D :D :D */ }
]).fail(function() {
/* salió todo mal :( */
});
Nada más simple que un array de callbacks para encadenar acciones al "contrato".
Hacer p(), y luego q().
Promise(p).then(q);
Hacer p(), y luego q(), r() y s().
Promise(p).then(q).then(r).then(s);
Hacer p(), q() y r(). Al finalizar todas, hacer s().
Promise(p, q, r).then(s);
Resulta más fácil entender qué está haciendo el código mediante construcciones como .done()
o .then()
.
A diferencia de un modelo basado en eventos, podemos incorporar callbacks en cualquier momento, sin importar el estado de la promesa.
Se emplea un mismo patrón de diseño para tareas sincrónicas y asincrónicas.
Promise.js es una librería con full cross-browser compatibility (IE5.5+, FF1.5+). Incluye la implementación básica del patrón de diseño, junto con unos métodos para peticiones HTTP asincrónicas.
function asyncearAlgo(x) {
var p = new Promise();
setTimeout(function() {
p.done();
}, 5000);
return p;
};
¿Qué nos permite esto?
function asyncearAlgo(x) { ... }
asyncearAlgo("bla bla").then(function() {
alert("Listo, ya asinqueé");
});
Una forma bellísima de manejar el asincronismo.
asyncearAlgo("bla bla").then(function() {
alert("Listo, ya asinqueé");
}).then(function() {
alert("Listo, ya asinqueé");
}).then(function() {
alert("Listo, ya asinqueé");
});
promise.get("/mis-cosas").then(
function(error, text, xhr) {
var div = document.getElementById("mis-cosas");
div.innerHTML = text;
}
));
$.get("/mis-cosas").done(
function(data) { ; }
).error(
function() { alert("oops"); }
);
{ "by": "@joelalejandro",
"project": "CbaJS 1.0",
"date": new Date(2013, 9, 18) }