Voglio trasformare una funzione asincrona in sincrono.Programmazione asincrona in JavaScript senza callback disordinati
function fetch() {
var result = 'snap!';
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function messyCallback(data){
result = data;
});
return result;
}
document.write(fetch());
Il risultato sarà sempre 'Snap!', Perché $.getJSON
fuga dopo fetch()
è fatto.
La mia prima idea era:
function fetch() {
var result = 'snap!';
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function messyCallback(data){
result = data;
});
while (true) { if (result != 'snap!') return result; }
}
Non funziona e anche soffiare via il browser.
Ho letto su generators and iterators in JS 1.7, ma non ho idea di come applicarlo al mio problema.
Questa domanda non riguarda davvero jQuery. Invece di $.getJSON potrebbe essere una qualsiasi altra funzione asincrona.
possibile (probabile?) Duplicati - vedi http://stackoverflow.com/questions/1455870/jquery-wait-for-function-to-complete -to-continua-elaborazione. –
Jeff, non penso. Io uso la chiamata JSONP, che è sempre sincrona. – NVI
@NV: JSONP è solo sincrono se analizzato come parte del documento HTML. Se viene aggiunto alla pagina usando il DOM, è asincrono. –