Связь между бэкендом http4s и интерфейсом Binding.scala
Я пытаюсь использовать Binding.scala с существующим бэкенд-сервисом http4s, но потерялся в том, как они будут сочетаться друг с другом. Я не уверен, как "связать", скажем, FS2 Task
или кошки-эффект IO
с Binding.scala.
1 ответ
Я никогда не использовал http4s, но подсказка может заключаться в использовании FutureBinding.
Пока вы получаете будущее, вы можете использовать его довольно красиво:
Вот мой пример для вызова асинхронного веб-сервиса (ajax-call):
@dom def afClients(): Binding[HTMLElement] = {
val apiPath = s"/calendar/afClients"
FutureBinding(Ajax.get(apiPath))
.bind match {
case None =>
<div class="ui active inverted dimmer front">
<div class="ui large text loader">Loading</div>
</div>
case Some(Success(response)) =>
val json = Json.parse(response.responseText)
info(s"Json received List[AFClientConfig]: ${json.toString().take(20)}")
json.validate[List[AFClientConfig]] match {
case JsSuccess(u, _) =>
changeAFClients(u)
<div>
</div>
case JsError(errors) =>
<div>
{s"Problem parsing User: ${errors.map(e => s"${e._1} -> ${e._2}")}"}
</div>
}
case Some(Failure(exception)) =>
error(exception, s"Problem accessing $apiPath")
<div>
{exception.getMessage}
</div>
}
}