method - jquery submit promise
Diferido versus promesa (2)
¿Cuál es la diferencia entre Deferred y Promise que no sean las versiones de jQuery?
¿Qué debería usar para mi necesidad? Solo quiero llamar a fooExecute()
. Solo necesito fooStart()
y fooEnd()
para alternar el estado del html div por ejemplo.
//I''m using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }
$(''#button1'').on(''click'', function() {
var deferred1 = $.Deferred();
var promise1 = $.Promise();
deferred1.???
promise1.???
});
Primero: no 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 suelen utilizar si escribe su propia función y desea hacer una promesa al código de llamada. Tú eres el productor del valor.
Una promesa es, como su nombre lo dice, una promesa sobre un valor futuro. Puede adjuntar devoluciones de llamada para obtener ese valor. La promesa fue "entregada" a usted y usted es el receptor del valor futuro.
No puedes 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 apoyo prometedor 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. ( reenviar ) Si está llamando a una función que a su vez devuelve una promesa, entonces no tiene que crear su propio objeto diferido. Puedes simplemente devolver esa promesa. En este caso, la función nota crear un valor, pero lo reenvía (tipo de):
function fetchData() {
// do some configuration here and pass to `$.ajax`
return $.ajax({...});
}
fetchData().done(function(response) {
// ...
});
3. ( recibir ) Algunas veces no desea crear o transmitir promesas / valores, quiere usarlos directamente, es decir, usted es el receptor de cierta información:
$(''#my_element'').fadeOut().promise().done(function() {
// called when animation is finished
});
Por supuesto, todos estos casos de uso se pueden mezclar también. Su función puede ser el receptor de un valor (de una llamada Ajax, por ejemplo) y calcular (producir) un valor diferente en función de eso.
Preguntas relacionadas:
- ¿Cuáles son las diferencias entre Deferred, Promise y Future en JavaScript?
- ¿Cuál es la diferencia entre un objeto diferido y su propio objeto prometido?
Una promesa es algo que puede establecer en un objeto diferido que se ejecuta cuando se completa la recopilación diferida.
Ejemplo de la documentación de jQuery :
<!DOCTYPE html>
<html>
<head>
<style>
div {
height: 50px; width: 50px;
float: left; margin-right: 10px;
display: none; background-color: #090;
}
</style>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>
<script>
$("button").on( "click", function() {
$("p").append( "Started...");
$("div").each(function( i ) {
$( this ).fadeIn().fadeOut( 1000 * (i+1) );
});
$( "div" ).promise().done(function() {
$( "p" ).append( " Finished! " );
});
});
</script>
</body>
</html>
Esto ejecuta una función en cada div
y ejecuta el código .promise
cuando se completan todas .each
ejecuciones .each
.