У меня есть объект Javascript, для которого требуется 2 вызова внешнего сервера для создания его содержимого и создания чего-либо значимого. Объект построен таким образом, что экземпляр экземпляра его автоматически будет выполнять эти 2 вызова. В двух вызовах используется общая функция обратного вызова, которая работает с возвращенными данными, а затем вызывает другой метод. Проблема в том, что следующий метод не следует вызывать до тех пор, пока оба метода не вернутся. Вот код, как я реализовал это в настоящее время:Javascript - синхронизация после асинхронных вызовов
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();
}
Как вы можете видеть, я принуждая объект, чтобы продолжить после того, как оба вызова вернулся используя простой счетчик для проверки они оба вернулись. Это работает, но кажется очень плохой реализацией. Я только работал с Javascript в течение нескольких недель, и мне интересно, есть ли лучший способ сделать то же самое, что я еще должен наткнуться.
Спасибо за любую помощь.
То, как вы это делаете, является правильным. Я не вижу ничего плохого в вашем текущем методе. Каждому экземпляру нужен свой счетчик, чтобы знать, когда он получил все ответы. Это единственный метод, который я могу решить, чтобы решить вашу проблему. – fearphage