JSON-RPCでの非同期メソッド呼び出し方法

sugaさんとこで、Backlogのコンボの反応が遅いという指摘がありました。
このコンボの更新はJSON-RPCを使って、JavaScriptから直接サーバに問い合わせをおこなっています。確かに前から遅いと思っていましたが、どうやらJSON-RPCで、同期呼び出しを使っていたからでした。

■同期呼び出し
http://oss.metaparadigm.com/jsonrpc/manual.html#synchronous-calls

function updateComponents(id) {
  var jsonrpc = new JSONRpcClient("JSON-RPC");
  // 同期呼び出しのため、サーバ側から処理が変えるまで待ちます。
  var components = jsonrpc.xxxService.getComponents('1');
  for (var i = 0; i < components.lengthl; i++) {
    var component = components[i];
    ...
  }

JSON-RPCには非同期のメソッド呼び出しもあるみたいなので、
早速切り替えてみました。
同期、非同期の切り替えはコールバックメソッドを与えるかどうかの違いだけのようです。
■非同期呼び出し
http://oss.metaparadigm.com/jsonrpc/manual.html#asynchronous-calls

function updateComponents(id) {
  var jsonrpc = new JSONRpcClient("JSON-RPC");
  //  第1引数にコールバックメソッドのメソッドを指定します。
  // 非同期なので待ちはなく、呼び出しと同時に制御が戻ります。
  jsonrpc.xxxService.getComponents(callbackGetComponents, id);
}

// このメソッドはgetComponentsが完了したあとで、呼び出されます。
// 第1引数は戻り値、第2引数はサーバサイドでの例外
function callbackGetComponents(components, exception) {
  if (exception != null) { alert(exception); }
    for (var i = 0; i < components.lengthl; i++) {
    var component = components[i];
    ...
  }
}

今日リリースするバージョンに非同期呼び出しの処理を入れてみました。
興味のある方は、
こちら
でプロジェクトのコンボボックスを動かしてみてください。
コンポーネントやバージョンのコンボが非同期で更新されます。