我正在尝试为使用 AJAX 调用初始化的 Singleton 制定正确的模式。这是我已经工作的一个简化示例。
它按预期工作,但我觉得这不是“正确”的方式,并且有一些方法可以将初始化程序的回调挂钩到当前正在运行的 ajax 请求的成功调用中,我担心可能会有一场比赛条件与数组方法。我在正确的轨道上吗?
var singletonObj;
$.Class("SingletonTest", {
init: function(onSuccess) {
if (singletonObj) {
if (singletonObj.ajaxLoaded) {
onSuccess(singletonObj);
}
else {
singletonObj.callbacks.push(onSuccess);
}
}
else {
singletonObj = this;
singletonObj.callbacks = new Array(onSuccess);
singletonObj.count=0;
$.ajax({
url: "/path/to/json/config",
method: "GET",
success: function (res) {
singletonObj.data = res.meta_data;
singletonObj.ajaxLoaded = true
singletonObj.callbacks.forEach(function(callback) {
callback(singletonObj);
});
}
});
}
},
counter: function() {
return this.count++;
}
});
new SingletonTest( function(obj) { console.log("First call: "+obj.counter() ) });
new SingletonTest( function(obj) { console.log("Second call: "+obj.counter() ) });
new SingletonTest( function(obj) { console.log("Third call: "+obj.counter() ) });
或者有没有更简单的方法来做到这一点?我在这里缺少什么概念可以让生活更轻松?