【发布时间】:2010-10-25 17:58:38
【问题描述】:
我有一个 Javascript 对象,它需要 2 次调用外部服务器来构建其内容并做任何有意义的事情。该对象的构建使得实例化它的实例将自动进行这两个调用。这两个调用共享一个通用的回调函数,该函数对返回的数据进行操作,然后调用另一个方法。问题是在两个方法都返回之前不应该调用下一个方法。这是我目前实现的代码:
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 几个星期,想知道是否有更好的方法来做同样的事情,我还没有偶然发现。
感谢所有帮助。
【问题讨论】:
-
你的做法是正确的。我认为您当前的方法没有任何问题。每个实例都需要自己的计数器来知道它何时收到所有响应。这是我能想到的解决您问题的唯一方法。
标签: javascript asynchronous callback synchronous