Hola a todos. Tengo, lo que parece ser, un problema trivial. Tengo el siguiente JavaScript:jQuery: ¿espera a que se complete la función para continuar procesando?
$(function() {
var r = GetResults();
for(var i = 0; i < r.length; i++) {
// Do stuff with r
}
});
function GetResults() {
$.getJSON("/controller/method/", null, function(data) {
return data;
});
}
Debido al hecho de que estoy llamando a un método de forma asíncrona, la secuencia de comandos continúa ejecutándose y cuando se encuentra con el bucle for, r
, obviamente, no va a tener un valor aún. Mi pregunta es: cuando tengo un método que está haciendo una operación asincrónica, y dependo de los datos que devuelve en el bloque principal, ¿cómo detengo la ejecución hasta que se devuelven los datos? Algo como:
var r = GetResults(param, function() {
});
donde la función es una función de devolución de llamada. No puedo mover el procesamiento de bucle for a la función de devolución de llamada de la solicitud JSON porque estoy reutilizando la funcionalidad de GetResults varias veces en toda la página, a menos que desee duplicar el código. ¿Algunas ideas?
Gracias por la respuesta. La razón por la que dividí GetResults fue porque estoy reutilizando esa funcionalidad varias veces en toda la página. Debería editar mi publicación para decir eso. – user135383
si necesita hacer el mismo procesamiento en datos provenientes de múltiples lugares, solo reemplace su función de devolución de llamada con una función nombrada y realice el procesamiento allí. $ .getJSON ("/ controller/method /", null, processData (data)); function processData (d) {...} –