Ich habe ein Javascript-Objekt, das 2 Aufrufe an einen externen Server erfordert, um seinen Inhalt zu erstellen und alles sinnvoll zu tun. Das Objekt ist so aufgebaut, dass das Instanziieren einer Instanz automatisch zu diesen 2 Aufrufen führt. Die zwei Aufrufe teilen eine gemeinsame Rückruffunktion, die mit den zurückgegebenen Daten arbeitet und dann eine andere Methode aufruft. Das Problem ist, dass die nächste Methode erst aufgerufen werden sollte, wenn beide Methoden zurückkehren. Hier ist der Code, wie ich es zur Zeit umgesetzt haben:Javascript - Synchronisierung nach asynchronen Aufrufen
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();
}
Wie Sie sehen können, bin ich gezwungen, das Objekt fortzusetzen, nachdem beide Anrufe zurückgegeben haben einen einfachen Zähler zu validieren sie beide zurück. Das funktioniert aber scheint eine wirklich schlechte Implementierung zu sein. Ich habe erst seit ein paar Wochen mit Javascript gearbeitet und frage mich, ob es eine bessere Methode gibt, das Gleiche zu tun, über das ich noch stolpern muss.
Danke für jede Hilfe.
Die Art, wie Sie es tun, ist richtig. Ich sehe mit Ihrer derzeitigen Methode nichts falsch. Jede Instanz benötigt einen eigenen Zähler, um zu wissen, wann sie alle Antworten erhalten hat. Das ist die einzige Methode, die ich mir vorstellen kann, um Ihr Problem zu lösen. – fearphage