Quiero convertir una función asincrónica en síncrona.Programación asincrónica en JavaScript sin devoluciones de llamada desordenadas
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());
El resultado será siempre 'no!', Porque $.getJSON
fuga después de fetch()
se hace.
Mi primera 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; }
}
No funciona y también volar fuera del navegador.
He leído sobre generators and iterators in JS 1.7, pero no tengo idea de cómo aplicarlo a mi problema.
Esta pregunta no es realmente acerca de jQuery. En lugar de $.getJSON podría ser cualquier otra función asincrónica.
posible (probable?) Duplicados - ver http://stackoverflow.com/questions/1455870/jquery-wait-for-function-to-complete -to-continuar-procesando. –
Jeff, no lo creo. Uso la llamada JSONP, que siempre es sincrónica. – NVI
@NV: JSONP solo es síncrono cuando se analiza como parte del documento HTML. Si se agrega a la página usando el DOM, es asíncrono. –