В документации autobahnJS предусмотрен следующий пример, чтобы проиллюстрировать, как сделать настроить удаленный вызов процедур (RPC):autobahn JS, а что, если вызываемый 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 вернет обещание. Но я не уверен, возможно ли это в RPC?
Добро пожаловать на переполнение стека. Прежде чем отвечать на вопрос, убедитесь, что вы прочитали документы о том, как ответить. https://stackoverflow.com/help/how-to-answer Лучшие ответы не только дают решение, но и объясняют * почему * это лучшее решение. –