しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

SignalR と jQuery Deferred Object の関係

昨日 SignalR を簡単に使ってみましたが、JavaScript からサーバ側メソッドを呼び出した時に done メソッドを使って実行結果を取得しました。

sample.getValues().done(function (values) {
    alert(values);
});

これ、書いてる時には気が付かなかったんですが jQuery の Deferred オブジェクトを返してるんですね。

ということは、以下のようなこともできるわけです。

$.when(sample.getValues1(), sample.getValues2()).done(function (v1, v2) {
    // getValues1 と getValues2 の呼び出しが完了したら呼ばれる
}).fail(function() {
    // 呼び出しに失敗したら呼ばれる
});

上の例では両方とも SignalR を使っていますが、jQuery の最近のバージョンでは Ajax 系のメソッドが Deferred Object を返すようになっているので、混在して使うこともできますね。

$.when(sample.getValues(), $.ajax("/sample/values")).done(function (v1, v2) {
    // 両方とも成功したら呼ばれる
});

SignalR は Deferred Object 使ったり、$.connection で Hubs を取得したりと綺麗に jQuery と統合されていますね。