Primero: no se puede usar $.Promise();
porque no existe.
Un objeto diferido es un objeto que puede crear una promesa y cambiar su estado a resolved
o rejected
. Los diferidos se utilizan normalmente si escribe su propia función y desea proporcionar una promesa al código de llamada. Eres el productor del valor.
Una promesa es, como su nombre lo indica, una promesa de valor futuro. Puede adjuntar devoluciones de llamada para obtener ese valor. La promesa le fue "dada" y usted es el receptor del valor futuro.
No puede modificar el estado de la promesa. Solo el código que creó la promesa puede cambiar su estado.
Ejemplos:
1. ( producir ) Utiliza objetos diferidos cuando desea proporcionar soporte de promesa para sus propias funciones. Calcula un valor y desea controlar cuándo se resuelve la promesa.
function callMe() {
var d = new $.Deferred();
setTimeout(function() {
d.resolve('some_value_compute_asynchronously');
}, 1000);
return d.promise();
}
callMe().done(function(value) {
alert(value);
});
2. ( adelante ) Si está llamando a una función que en sí misma devuelve una promesa, entonces no tiene que crear su propio objeto diferido. Puedes devolver esa promesa. En este caso, la función no crea valor, sino que lo reenvía (más o menos):
function fetchData() {
return $.ajax({...});
}
fetchData().done(function(response) {
});
3. ( recibir ) A veces no quieres crear o transmitir promesas / valores, quieres usarlos directamente, es decir, eres el receptor de cierta información:
$('#my_element').fadeOut().promise().done(function() {
});
Por supuesto, todos estos casos de uso también se pueden mezclar. Su función puede ser el receptor de valor (de una llamada Ajax, por ejemplo) y calcular (producir) un valor diferente basado en eso.
Preguntas relacionadas: