我正在使用 httpRequestHandlers 进行 Web 客户端和 Wakanda 服务器之间的所有交互。我没有使用从服务器到客户端的 Wakanda 连接器。
当 ssjs 调用其他服务器等待响应时,如何向 Web ui 提供异步响应(承诺)?
Promise 是客户端唯一关心的问题。除了使用 httpRequestHandler 返回结果(正如您已经在做的那样)之外,您不需要从 Wakanda Server 执行任何操作。如何处理请求客户端是您的选择。
您的服务器端代码正在向第三方发出请求这一事实不会影响您将如何处理浏览器的异步特性(无论是承诺还是回调)。您的 Wakanda 服务器代码将同步并等待响应。反过来,当服务器端请求完成时,包括对第 3 方的请求,它会响应您的浏览器。
由于 Wakanda 服务器是多线程的,请求的同步代码不会阻止其他请求的完成。
我希望这有帮助。
客户端调用是异步进行的,如下所述:docs 要支持承诺,您必须使用像 Bluebird 这样的库,并通过回调承诺本机调用以获取返回承诺的函数。
在 HTTP 请求处理程序中调用异步服务器端方法也很简单。只是不要在主函数中使用 return,而是在你的回调中设置 response.body (和/或 response.statusCode,headers ...)。它可能看起来像这样:
function myHandler(request, response){
callAsync(myParam, {onSuccess: function(event){
response.body = event.result;
});
}
我同意之前的回答,即在应用程序的前端使用 Promises 不需要从后端提供任何特殊功能。
如果您使用 Wakanda 的 REST API,您可以使用已经公开了 Promise API的Wakanda JavaScript 客户端。
您可以访问快速入门 wiki 页面以了解更多信息。