昨日 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 と統合されていますね。