Ho un oggetto Javascript che richiede 2 chiamate a un server esterno per creare il suo contenuto e fare qualcosa di significativo. L'oggetto è costruito in modo tale che l'istanziazione di una sua istanza farà automaticamente queste 2 chiamate. Le 2 chiamate condividono una funzione di callback comune che opera sui dati restituiti e quindi chiama un altro metodo. Il problema è che il prossimo metodo non dovrebbe essere chiamato fino al ritorno di entrambi i metodi. Ecco il codice come ho implementato attualmente:Javascript - sincronizzazione dopo chiamate asincrone
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();
}
Come potete vedere, sto costringendo l'oggetto di continuare dopo le chiamate sono tornati con un semplice contatore per convalidare entrambi hanno restituito. Funziona ma sembra un'implementazione davvero scarsa. Ho lavorato con Javascript solo per alcune settimane e mi chiedo se esiste un metodo migliore per fare la stessa cosa su cui devo ancora imbattermi.
Grazie per qualsiasi aiuto.
Il modo in cui lo stai facendo è corretto. Non vedo nulla di sbagliato con il tuo metodo attuale. Ogni istanza ha bisogno del proprio contatore per sapere quando ha ricevuto tutte le risposte. Questo è l'unico metodo che posso pensare per risolvere il tuo problema. – fearphage