autobahnJSのドキュメントでは、リモート プロシージャ コール (RPC) をセットアップする方法を示す次の例が提供されています。
...
// 3) register a procedure for remoting
function add2(args) {
return args[0] + args[1];
}
session.register('com.myapp.add2', add2);
// 4) call a remote procedure
session.call('com.myapp.add2', [2, 3]).then(
function (res) {
console.log("Result:", res);
}
);
...
add2 が何らかの非同期操作を行う必要がある場合はどうすればよいでしょうか? 私の考えは、backend.add2 への最初の呼び出しをトリガーしたクライアントに登録されている別のリモート関数をコールバックできるかもしれないというものでした。このようなもの:
...
//backend code
function add2(args) {
setTimeout(function() {
console.log("We are done here");
session.call('client.added', [123])
}, 1000);
return null; // useless, this value is never used
}
session.register('backend.add2', add2);
// client code
session.call('backend.add2', [2, 3]).then(
function (res) {
console.log("Result:", res);
}
);
...
もっと良い選択肢はありますか?これは私には少し面倒に思えます。add2 が promise を返すのが理想的です。しかし、これが RPC 経由で可能かどうかはわかりません。