2013-02-12 13 views
5

私は、ユーザーが数回実行するかもしれないが、コールバックが少し手を出すのに十分な非同期アクションを伴う一連の関数を持つWebアプリケーションを構築しています。Jquery約束:再利用可能な代替品はありますか?

$.Deffered$.whenの現実的な代替手段は何度も「使用」できますか?

  • 私は(直接)

感謝をコールバックを使用したくない

  • 本格的なフレームワークを探していませんよ!これらのライブラリは、 "吹きいっぱい" ではありません

    1. Q
    2. rsvp.js
    3. when.js

    :ここ

  • +0

    1)あなたはjQueryのの残りの部分を使用する必要はありません。 「競合なし」モードで構成することができます。 2)他にどのように遅延がありますか?コールバックはJavaScriptで実装されますか? –

    +0

    非同期プログラミングのポイントは、開始されたアクションがスレッドをブロックせずに完了したことをクライアントに通知するためのコールバックを持つことです。クライアントに通知したくない場合は、コールバックを無視して何もしないでください。 – Asdfg

    +2

    「複数回使用する」という意味は分かりません。 – Pointy

    答えて

    1

    は3つの、このようなライブラリです。彼らは約束を履行するだけです。

    +0

    投稿者:RSVP.js「約束が解決または拒否されたら、それを解決したり拒否することはできません。 ? – Haroldo

    +0

    @Haroldo - もちろんです。それはそれが[仕様で定義されている]方法です(http://promises-aplus.github。com/promises-spec /#promise_states)(3.1.2.1。&3.1.3.1)、それがjQueryのシステムの仕組みです。 – MegaHit

    +1

    おそらく私の質問は十分にはっきりしませんでした。私は、約束の機能を提供するライブラリではないことを約束する* alternatve *を探しています... – Haroldo

    0

    代わりに直接約束を取り付ける、あなたはコールバックが設定された間隔で行われた定期的な約束や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); 
    
    2

    私が考える何を探しているのはイベントです。 ontriggerを使用して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 
    
    関連する問題