Tengo una situación similar en un juego creado con Three.js y Google Closure. Tengo que cargar 2 recursos, Three y Closure no me permiten hacer estos sincrónicos.
Inicialmente ingenuamente escribió lo siguiente:
main() {
...
var loaded=0;
...
// Load Three geometry
var loader = new THREE.JSONLoader();
loader.load("x/data.three.json", function(geometry) {
...
loaded++;
});
// Load my engine data
goog.net.XhrIo.send("x/data.engine.json", function(e) {
var obj = e.target.getResponseJson();
...
loaded++;
});
// Wait for callbacks to complete
while(loaded<2) {}
// Initiate an animation loop
...
};
El bucle que espera a que las devoluciones de llamada para completar nunca termina, desde el punto de vista del bucle loaded
nunca se incrementa. El problema es que las devoluciones de llamada no se activan hasta que main
regresa (al menos en Chrome de todos modos).
Una solución podría consistir en revisar ambas devoluciones de llamada para ver si es la última en completarse, y luego iniciar el ciclo de animación.
Otra solución - tal vez una respuesta más directa a lo que están pidiendo (cómo esperar para cada carga antes de iniciar otra) - sería anidar las devoluciones de llamada de la siguiente manera:
// Load Three geometry
var loader = new THREE.JSONLoader();
loader.load("x/data.three.json", function(geometry) {
...
// Load my engine data
goog.net.XhrIo.send("x/data.engine.json", function(e) {
var obj = e.target.getResponseJson();
...
// Initiate an animation loop
...
});
});
};
Me gustaría que la gente dejar comentarios explicativos cuando -1. – kojiro