Tengo un objeto Javascript que requiere 2 llamadas a un servidor externo para crear su contenido y hacer algo significativo. El objeto está construido de tal manera que la instancia de una instancia de este hará automáticamente estas 2 llamadas. Las 2 llamadas comparten una función de devolución de llamada común que opera sobre los datos devueltos y luego llama a otro método. El problema es que el siguiente método no debe invocarse hasta que ambos métodos regresen. Aquí está el código que he implementado en la actualidad:Javascript - sincronización después de llamadas asíncronas
foo.bar.Object = function() {
this.currentCallbacks = 0;
this.expectedCallbacks = 2;
this.function1 = function() {
// do stuff
var me = this;
foo.bar.sendRequest(new RequestObject, function(resp) {
me.commonCallback(resp);
});
};
this.function2 = function() {
// do stuff
var me = this;
foo.bar.sendRequest(new RequestObject, function(resp) {
me.commonCallback(resp);
});
};
this.commonCallback = function(resp) {
this.currentCallbacks++;
// do stuff
if (this.currentCallbacks == this.expectedCallbacks) {
// call new method
}
};
this.function1();
this.function2();
}
Como se puede ver, yo estoy forzando el objeto de continuar después de que ambos han regresado las llamadas utilizando un simple contador para validar que tienen ambos regresaron. Esto funciona, pero parece una implementación realmente pobre. Solo he trabajado con Javascript durante algunas semanas y me pregunto si existe un método mejor para hacer lo mismo que todavía tengo que encontrar.
Gracias por toda la ayuda.
La forma en que lo hace es correcta. No veo nada mal con su método actual. Cada instancia necesita su propio contador para saber cuándo ha recibido todas las respuestas. Ese es el único método que puedo pensar para resolver su problema. – fearphage