我在javascript中有一个生产者 - 消费者设计,生产者通过ajax提取一些JSON数据。消费者每个都使用自定义回调函数注册对数据的兴趣,然后在数据可用时(或者如果加载失败)稍微延迟后,每个消息都会得到一个回调。
我实际触发回调的当前功能如下所示:
// Function to iterate through all registered callbacks
this._processCallbacks = function() {
var self = this;
for (var callback of this.callbacks) {
setTimeout(function(){ callback(self.data != null) }, 2000);
}
}
...但是有了这个,列表中的最后一个回调被称为N次,而不是每次回调一次。
如果我删除了setTimeout
并且只是同步调用它就可以了......
// Function to iterate through all registered callbacks
this._processCallbacks = function() {
var self = this;
for (var callback of this.callbacks) {
callback(self.data != null);
}
}
...所以我假设我错过了关闭范围和超时的一些微妙之处。任何帮助表示赞赏 - 我不确定我错过了什么(我唯一知道的范围问题是this
被修改的问题)。