Come posso utilizzare correttamente jQuery differite per ritardare il ritorno della funzione finché chiamata asincrona entro la funzione completa + ottenere il valore di ritorno?jQuery differito: utilizzare per ritardare il ritorno della funzione fino alla chiamata asincrona entro la funzione completa + ottenere il valore di ritorno
Questo è il mio codice corrente:
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();
}
Voglio che questo per stampare { "field1": "value1", "field2": "valore2"}
var result = getFields('http://something');
console.log(JSON.stringify(result));
Tuttavia, il valore di risultato sembra essere un oggetto jQuery - quindi sto facendo qualcosa di sbagliato, ma cosa?
Grazie!
P.S. Ci scusiamo per la domanda per principianti, sono un utente per la prima volta in differita, quindi sto ancora cogliendo i concetti di base.
@ Sly_caridnal: +1 e verifica - ottima spiegazione! – bguiz
Oooh, bello ... Avvolgere 'dff.resolve (data);' in un 'setTimeout' è un modo facile e veloce per simulare una chiamata ajax lenta (poiché quello che sto testando non finisce in modo coerente prima o dopo un seconda chiamata ajax) – Izkata
C'è un modo in realtà: cambia la dichiarazione di ritorno della funzione 'getFields (page)' come 'return dff.promise(). getState() == 'resolved'' Si fermerà fino a quando la risoluzione o il rifiuto non si verificano. Ovviamente puoi solo restituire l'oggetto promessa stesso e controllare lo stato da qualche altra parte. – shuangwhywhy