¿Cómo puedo usar jQuery diferidos para retrasar el retorno de la función hasta que se realice una llamada asincrónica dentro de la función completa + obtener valor devuelto?jQuery diferido: usar para retrasar el retorno de la función hasta llamada asincrónica dentro de la función completa + obtener valor de retorno
Este es mi código actual:
function getFields(page)
{
var dff = $.Deferred();
result = {};
$.ajax(//the async call
{
url: page,
success:
function (data)
{
//work out values for field1 & field 2 from data here
result =
{
'field1' : field1,
'field2' : field2
};
},
complete:
function()
{
dff.resolve(result); //my attempt to return the result
}
}
);
return dff.promise();
}
quiero esto para imprimir { "campo1": "campo2" "valor1": "valor2"}
var result = getFields('http://something');
console.log(JSON.stringify(result));
Sin embargo, el valor del resultado parece ser un objeto jQuery, entonces estoy haciendo algo mal, pero ¿qué?
Gracias!
P.S. Perdón por la pregunta de novato, soy un usuario por primera vez de diferidos, por lo que sigo captando los conceptos básicos.
@ Sly_caridnal: +1 y comprobar - gran explicación! – bguiz
Oooh, nice ... Envolver 'dff.resolve (data);' en un 'setTimeout' es una manera rápida y fácil de simular una llamada lenta de ajax (ya que lo que estoy probando no termina consistentemente antes o después de una segunda llamada ajax) – Izkata
Hay una forma en realidad: cambiar la declaración de retorno de la función 'getFields (page)' como 'return dff.promise(). getState() == 'resolved'' Pausará hasta que se resuelva o rechace. Por supuesto, solo puede devolver el objeto prometido y verificar el estado en otro lugar. – shuangwhywhy