gpt4 book ai didi

javascript - autobahn JS,如果 RPC 的被调用者是异步的怎么办?

转载 作者:行者123 更新时间:2023-12-03 05:53:22 24 4
gpt4 key购买 nike

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 实现?

最佳答案

您可以返回一个 promise ,一旦异步函数返回,该 promise 就会得到解决。

从 AutobahnJS API reference page :

function myAsyncFunction(args, kwargs, details) {
var d = new autobahn.when.defer();

setTimeout(function() {
d.resolve("async finished");
}, 1000);

return d.promise;
}

关于javascript - autobahn JS,如果 RPC 的被调用者是异步的怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com