私は、ユーザーが数回実行する可能性のある一連の機能を持つ Web アプリを構築していますが、コールバックが少し手に負えないほど十分な非同期アクションを伴います。
複数回「使用」できる現実$.Deffered
的な代替手段は何ですか?$.when
- 本格的なフレームワークを探しているわけではありません
- コールバックを (直接) 使いたくない
ありがとう!
私は、ユーザーが数回実行する可能性のある一連の機能を持つ Web アプリを構築していますが、コールバックが少し手に負えないほど十分な非同期アクションを伴います。
複数回「使用」できる現実$.Deffered
的な代替手段は何ですか?$.when
ありがとう!
あなたが探しているのはイベントだと思います。onとtriggerを使用した jQuery の例:
var data_handler = $({});
function get_data(new_foo) {
// Do stuff, then send the event
data_handler.trigger('new_data', {foo: new_foo});
}
data_handler.on('new_data', function(e, data) {
console.log('Handler 1: ' + data.foo);
});
data_handler.on('new_data', function(e, data) {
console.log('Handler 2: ' + data.foo);
});
get_data(1);
get_data(2);
出力:
Handler 1: 1
Handler 2: 1
Handler 1: 2
Handler 2: 2
promise に直接アタッチする代わりに、promise の周りにラッパーを作成して、コールバックが定期的な promise または設定された間隔で行われる Ajax 呼び出しをサブスクライブできるようにすることができます。
var cycle = function(func, interval){
var _this = this;
// Use jQuery's triggers to manage subscriptions
var o = $({});
this.publish = o.trigger.bind(o);
this.subscribe = o.on.bind(o);
this.unsubscribe = o.off.bind(o);
var call = function(func){
clearTimeout(_this.timeout);
func().done(function(response){
_this.publish('ajax:update', response);
_this.timeout = setTimeout(function(){
call(func);
}, interval);
});
};
call(func);
return this;
};
var ajax_promise = function(){
return $.getJSON('http://localhost/some/data.json');
};
var my_callback = function(response){
// Do stuff
};
cycle(ajax_promise, 10000).subscribe('ajax:update', my_callback);