AJAX呼び出しで初期化するシングルトンに使用する正しいパターンを見つけようとしています。これは、私がすでに取り組んでいることの単純化された例です。
期待どおりに動作しますが、これは「正しい」方法ではなく、初期化子のコールバックを現在実行中の 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() ) });
または、これを行う簡単な方法はありますか?生活を楽にするために、ここで欠けている概念は何ですか?