Как сделать wakanda async ssjs
Я использую httpRequestHandlers для всего взаимодействия между веб-клиентом и сервером Wakanda. Я не использую соединитель Wakanda от сервера к клиенту.
Как предоставить асинхронные ответы (обещания) веб-интерфейсу, когда вызовы ssjs на другие серверы ожидают ответа?
3 ответа
Обещания относятся исключительно к клиентской части. Вам не нужно ничего делать с Wakanda Server, кроме как вернуть результат (как вы уже делали), используя httpRequestHandler. Как вы обрабатываете запрос на стороне клиента - ваш выбор.
Тот факт, что ваш серверный код отправляет запрос третьей стороне, не влияет на то, как вы подходите к асинхронной природе браузера (будь то обещания или обратные вызовы). Ваш код Wakanda Server будет синхронным и будет ждать ответа. В свою очередь, когда запрос на стороне сервера будет завершен, включая запрос к третьей стороне, он ответит на ваш браузер.
Поскольку Wakanda Server является многопоточным, синхронный код для запроса не будет блокировать выполнение других запросов.
Надеюсь, это поможет.
Я согласен с предыдущими ответами о том, что использование Promises в передней части вашего приложения не требует от бэкэнда каких-либо специальных возможностей.
Если вы используете REST API Wakanda, вы можете использовать JavaScript-клиент Wakanda, который уже предоставляет Promise API.
Вы можете посетить страницу быстрого запуска вики, чтобы узнать больше.
Вызовы на стороне клиента должны выполняться асинхронно, как описано здесь: документы Для поддержки обещаний вам нужно будет использовать библиотеку, такую как Bluebird, и обещать собственные вызовы с помощью обратных вызовов, чтобы получить функции, возвращающие обещания.
Вызов методов асинхронной стороны сервера в обработчике HTTP-запросов также достаточно прост. Только не используйте return в основной функции, но установите response.body (и / или response.statusCode, headers...) в вашем обратном вызове. Это может выглядеть так:
function myHandler(request, response){
callAsync(myParam, {onSuccess: function(event){
response.body = event.result;
});
}