Jquery承诺:有可重用的替代方案吗?

时间:2013-02-12 20:36:46

标签: jquery javascript-events javascript

我正在构建一个Web应用程序,该应用程序具有一组用户可能执行几次的功能,但涉及足够的异步操作以使回调失控。

$.Deffered$.when可以多次“使用”的实际替代方案是什么?

  • 我不是在寻找一个完整的框架
  • 我不想使用回调(直接)

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为你要找的是事件。 jQuery中使用ontrigger

的示例
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

答案 1 :(得分:1)

以下是3个这样的库:

  1. Q
  2. rsvp.js
  3. when.js
  4. 这些图书馆并非“全面发展”。他们只是实施承诺。

答案 2 :(得分:0)

不是直接附加到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);