Buscar..


Introducción

Las promesas de jQuery son una forma inteligente de encadenar operaciones asíncronas de manera constructiva. Esto reemplaza la anidación de devoluciones de llamada en la vieja escuela, que no se reorganizan tan fácilmente.

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"


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow