jQuery
jQuery Objetos diferidos y Promesas
Buscar..
Introducción
Creación de promesa básica
Aquí hay un ejemplo muy simple de una función que " promete continuar cuando transcurra un tiempo determinado". Lo hace creando un nuevo objeto Deferred
, que se resuelve más tarde y devuelve la promesa del aplazado:
function waitPromise(milliseconds){
// Create a new Deferred object using the jQuery static method
var def = $.Deferred();
// Do some asynchronous work - in this case a simple timer
setTimeout(function(){
// Work completed... resolve the deferred, so it's promise will proceed
def.resolve();
}, milliseconds);
// Immediately return a "promise to proceed when the wait time ends"
return def.promise();
}
Y usar así:
waitPromise(2000).then(function(){
console.log("I have waited long enough");
});
Promesas asíncronas de encadenamiento
Si tiene varias tareas asíncronas que deben ocurrir una después de la otra, deberá encadenar sus objetos de promesa. Aquí hay un ejemplo simple:
function First() {
console.log("Calling Function First");
return $.get("/ajax/GetFunction/First");
}
function Second() {
console.log("Calling Function Second");
return $.get("/ajax/GetFunction/Second");
}
function Third() {
console.log("Calling Function Third");
return $.get("/ajax/GetFunction/Third");
}
function log(results){
console.log("Result from previous AJAX call: " + results.data);
}
First().done(log)
.then(Second).done(log)
.then(Third).done(log);
jQuery ajax () éxito, error VS.done (), .fail ()
éxito y error: una devolución de llamada exitosa que se invoca al completar con éxito una solicitud Ajax.
Una devolución de llamada fallida que se invoca en caso de que haya algún error al realizar la solicitud.
Ejemplo:
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json',
success: function (data) { successFunction(data); },
error: function (jqXHR, textStatus, errorThrown) { errorFunction(); }
});
.done () y .fail ():
.ajax (). done (función (datos, estado de texto, jqXHR) {}); Reemplaza el método .success () que estaba en desuso en jQuery 1.8. Esta es una construcción alternativa para la función de devolución de llamada exitosa anterior.
.ajax (). fail (función (jqXHR, textStatus, errorThrown) {}); Reemplaza el método .error () que estaba en desuso en jQuery 1.8. Esta es una construcción alternativa para la función de devolución de llamada completa anterior.
Ejemplo:
$.ajax({
url: 'URL',
type: 'POST',
data: yourData,
datatype: 'json'
})
.done(function (data) { successFunction(data); })
.fail(function (jqXHR, textStatus, errorThrown) { serrorFunction(); });
Obtener el estado actual de una promesa.
Por defecto, el estado de una promesa está pendiente cuando se crea. El estado de una promesa cambia cuando el objeto diferido que creó la promesa, ya sea que la resuelva o la rechace.
var deferred = new $.Deferred();
var d1= deferred.promise({
prop: "value"
});
var d2= $("div").promise();
var d3= $("div").hide(1000).promise();
console.log(d1.state()); // "pending"
console.log(d2.state()); // "resolved"
console.log(d3.state()); // "pending"